方法一
使用動態規劃。時間複雜度為 O(n)
,實際上為 O(n/2)
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package main
import ( "fmt" )
func main() { fmt.Println(fibonacci(10)) }
func fibonacci(n int) int { a, b := n%2, 1
for i := 0; i < n/2; i++ { a += b b += a }
return a }
|
方法二
使用動態規劃。時間複雜度為 O(n)
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package main
import ( "fmt" )
func main() { fmt.Println(fibonacci(10)) }
func fibonacci(n int) int { if n < 2 { return n }
a, b := 0, 1
for i := 0; i < n; i++ { next := a + b a, b = b, next }
return a }
|
方法三
使用遞迴函式。時間複雜度為 O(2^n)
,實際上為 O(1.6180339887^n)
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package main
import ( "fmt" )
func main() { fmt.Println(fibonacci(10)) }
func fibonacci(n int) int { if n < 2 { return n }
return fibonacci(n-2) + fibonacci(n-1) }
|
程式碼
參考資料