递归:
func fibonacci(i int) int {
if i < 1 {
return 0
}
if i == 1 || i == 2 {
return 1
}
return fibonacci(i-1) + fibonacci(i-2)
}
匿名函数(闭包):
func fibonacci2(i int) int {
var sum int
func(i int) int {
if i < 1 {
return 0
}
if i == 1 || i == 2 {
return 1
}
a, b := 1, 1
for j := 3; j <= i; j++ {
sum = a + b
a, b = b, sum
}
return b
}(i)
return sum
}
匿名函数(时间优化版:空间换时间)秒和微妙的差距
const LIM = 41
var fibs [LIM]uint64
func fibonacci3(i int) uint64 {
if fibs[i] != 0 {
return fibs[i]
}
if i < 1 {
return 0
}
if i == 1 || i == 2 {
return 1
}
fibs[i] = fibonacci3(i-1) + fibonacci3(i-2)
return fibs[i]
}