Go语言实现:【剑指offer】斐波那契数列
该题目来源于牛客网《剑指offer》专题。
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)
n<=39
Go语言实现:
递归:
func fib(N int) int {
if N == 0 {
return 0
}
if N == 1 {
return 1
}
return fib(N-1) + fib(N-2)
}
迭代:
func fib(N int) int {
if N == 0 {
return 0
}
if N == 1 {
return 1
}
//f(0) = f(1), f(1) = f(2)
a, b := 0, 1
for i := 2; i <= N; i++ { //此处需要等于N
a, b = b, a+b
}
return b
}
迭代的闭包写法:
func fib(N int) int {
if N == 0 {
return 0
}
if N == 1 {
return 1
}
f := fibonacci()
for i := 2; i < N; i++ { //此处需要小于N
f()
}
_, b := f()
return b
}
func fibonacci() func() (int, int) {
a, b := 0, 1
return func() (int, int) {
a, b = b, a+b
return a, b
}
}