Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

added golang

  • Loading branch information...
commit 3c04bc59d7b766f818ed5050c3ab5e2509bc56a4 1 parent c0dbd29
@coolaj86 authored
Showing with 97 additions and 0 deletions.
  1. +76 −0 fibonacci.go
  2. +21 −0 fibonacci.tour.go
View
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()
+}
View
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())
+ }
+}
Please sign in to comment.
Something went wrong with that request. Please try again.