Go语言实现:【剑指offer】斐波那契数列

时间:2023-03-09 01:08:53
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
}
}