什麼是斐波拉契數列(Fibonaccisequence)
斐波那契數列(Fibonacci sequence),又稱黃金分割數列,因數學家萊昂納多·斐波那契(Leonardo Fibonacci)以兔子繁殖爲例子而引入,故又稱爲“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……
使用Golang遞歸實現斐波拉契數列
package main
import (
"fmt"
)
func fibonacci(n int) (r int) {
if n <= 2 {
return 1
}
return fibonacci(n-1) + fibonacci(n-2)
}
func main() {
for i := 0; i < 10; i++ {
fmt.Printf("%d, ", fibonacci(i))
}
}
得到結果:
1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,
斐波拉契數列的遞歸實現優化
由於上述代碼使用了兩次遞歸,爲減少遞歸次數,對遞歸代碼優化如下:
package main
import (
"fmt"
)
func advanceFibonacii(n int) (r int) {
if n <= 2 {
return 1
}
result := 1
for i := 2; n > i; n-- {
result += advanceFibonacii(n - 2)
}
return result
}
func main() {
for i := 0; i < 10; i++ {
fmt.Printf("%d, ", advanceFibonacii(i))
}
}
得到結果
1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,
斐波那契數列的應用
- 算法
- 斐波那契堆
- 歐幾里得算法的時間複雜度
- 物理學:氫原子能級問題
- 自然界:植物的生長
- 波浪理論與股市
- 斐波那契螺旋
- 建築學
- 據說一個小男孩參考斐波那契數列發明了太陽能電池樹
- 斐波那契螺旋形的搖椅
總結
斐波那契數列非常重要,所有關於數學的書幾乎都會提到。