//斐波那契数列格式为:1、1、2、3、5、8、13、21、34、......,n=1和n=2的时候都是输出1
//也可以用递归 公式: fn(n-1)+fn(n-2)
package alg
import (
"fmt"
)
func main() {
fmt.Printf("%d \n", fibs(10))
}
func fibs(num int) int {
if num == 1 || num == 2 {
return 1
}
var n1, n2 int = 1, 2
n3 := 0
for i := 2; i <= num; i++ {
n3 = n1 + n2 //第三个数等于第一个数加上第二个数
n1 = n2 //第一个数等于第二个数
n2 = n3 //第二个数等于第三个数
}
return n3
}
//第二种思路 利用内存缓存实现,没测试那种效率高 github上面看到的一段实现
package main
import (
"fmt"
"time"
)
const LIM = 41
var fibs \[LIM\]uint64
func main() {
var result uint64 = 0
start := time.Now()
for i := 0; i < LIM; i++ {
result = fibonacci(i)
fmt.Printf("fibonacci(%d) is: %d\\n", i, result)
}
end := time.Now()
delta := end.Sub(start)
fmt.Printf("longCalculation took this amount of time: %s\\n", delta)
}
func fibonacci(n int) (res uint64) {
// memoization: check if fibonacci(n) is already known in array:
if fibs\[n\] != 0 {
res = fibs\[n\]
return
}
if n <= 1 {
res = 1
} else {
res = fibonacci(n-1) + fibonacci(n-2)
}
fibs\[n\] = res
return
}
来源:oschina
链接:https://my.oschina.net/hackdebug/blog/3158182