使用 Go 實現「費波那契數列」

方法一

使用動態規劃。時間複雜度為 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)) // 55
}

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)) // 55
}

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)) // 55
}

func fibonacci(n int) int {
if n < 2 {
return n
}

return fibonacci(n-2) + fibonacci(n-1)
}

程式碼

參考資料