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