mirror of https://github.com/coolaj86/fizzbuzz
AJ ONeal
12 years ago
2 changed files with 97 additions and 0 deletions
@ -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() |
|||
} |
@ -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…
Reference in new issue