gofibonacci.go 643 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Q26_fibonacci_go.go
  2. package main
  3. import (
  4. "fmt"
  5. "os"
  6. "time"
  7. )
  8. func main() {
  9. term := 25
  10. i := 0
  11. c := make(chan int)
  12. start := time.Now()
  13. go fibnterms(term, c)
  14. for {
  15. if result, ok := <-c; ok {
  16. fmt.Printf("fibonacci(%d) is: %d\n", i, result)
  17. i++
  18. } else {
  19. end := time.Now()
  20. delta := end.Sub(start)
  21. fmt.Printf("longCalculation took this amount of time: %s\n", delta)
  22. os.Exit(0)
  23. }
  24. }
  25. }
  26. func fibnterms(term int, c chan int) {
  27. for i := 0; i <= term; i++ {
  28. c <- fibonacci(i)
  29. }
  30. close(c)
  31. }
  32. func fibonacci(n int) (res int) {
  33. if n <= 1 {
  34. res = 1
  35. } else {
  36. res = fibonacci(n-1) + fibonacci(n-2)
  37. }
  38. return
  39. }