Browse Source

added golang

master
AJ ONeal 12 years ago
parent
commit
3c04bc59d7
  1. 76
      fibonacci.go
  2. 21
      fibonacci.tour.go

76
fibonacci.go

@ -0,0 +1,76 @@
package main
import (
"flag"
"fmt"
"strconv"
)
var max int
var ch chan int
func fib(a, b int) {
//func fib(a, b int, bag []int) {
//append(bag, a)
ch <- a
//fmt.Println(a)
if b > max {
ch <- b
//append(bag, b)
//fmt.Println(b)
} else {
fib(b, a + b)
}
}
func fibloop() {
a, b := 1, 1
ch <- a
ch <- b
//fmt.Println(a)
//fmt.Println(b)
for b < max {
a, b = b, a + b
ch <- b
//fmt.Println(b)
}
}
func printStuff() {
for {
i := <-ch
fmt.Println(i)
}
}
func main() {
flag.Parse()
var e error
ch = make(chan int)
go printStuff()
// stop counting once we get over 100 (or a user-set max)
if 0 == flag.NArg() {
max = 100
} else {
max, e = strconv.Atoi(flag.Args()[0])
}
if nil != e {
fmt.Println("argument must be an integer")
return
}
fmt.Println("recursively...")
fib(1, 1)
fmt.Println("")
fmt.Println("iteratively...")
fibloop()
}

21
fibonacci.tour.go

@ -0,0 +1,21 @@
package main
import "fmt"
// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
a := 0
b := 1
return func () int {
a, b = b, a + b;
return a;
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
Loading…
Cancel
Save