這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。費伯納西數列,又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21、……在數學上,費伯納西數列以如下被以遞迴的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)
遞迴實現
package mainimport "fmt"func fibonacci(num int) int{if num<2{return 1}return fibonacci(num-1) + fibonacci(num-2)}func main(){for i := 0; i<10; i++{nums := fibonacci(i)fmt.Println(nums)}}
閉包實現
package mainimport "fmt"func fibonacci() func() int{a, b := 0, 1return func() int{a, b = b, a+breturn a}}func main() {f := fibonacci()for i := 0; i < 10; i++ {fmt.Println(f())}}
方法3 通道chanel
package mainimport("fmt")func fib(n int, c chan int){a,b :=0,1for i:=0; i<n; i++{a,b = b,a+bc <- a}close(c)}func main(){c := make(chan int,10)fib(cap(c),c)for i:=range c{fmt.Println(i)}}
儲存計算結果的方法
package mainimport "fmt"var fibs [40]uint64func fib_function(n int) (res uint64) {if fibs[n] !=0{res = fibs[n]return }if(n<=1){res = 1}else{res = fib_function(n-1)+fib_function(n-2)}fibs[n] = resreturn }func main(){fib_function(10)for i := 0; i<10;i++{fmt.Println(fibs[i])}}