写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:1
示例 2:输入:n = 5
输出:5
提示:
0 <= n <= 100
思路:避免使用递归法(超时),推荐使用迭代法解题,即保存上一次的中间量,用于下一次sum的计算
时间复杂度:迭代法:O(n)
空间复杂度:O(1),常数个变量(first, second, sum)
// 0 1 1 2 3 5 ...
func fib(n int) int {
// 迭代法(推荐):i := 1, 返回sum
if n <= 1 { // 0、1
return n
}
first, second, sum := 0, 1, 1
// for i := 1; i < n; i++ { // 2、3、4、5...
for i := 2; i <= n; i++ {
sum = (first + second) % 1000000007 // sum = first + second 最终会导致sum越界错误!
first = second
second = sum
}
return sum
// 迭代法:i := 0, 返回first
// if n <= 1 {
// return n
// }
// first, second, sum := 0, 1, 1
// for i := 0; i < n; i++ {
// sum = (first + second) % 1000000007
// first =second
// second =sum
// }
// return first
// 递归(超时):
// if n <= 1 {
// return n
// }
// return fib(n - 1) + fib(n - 2)
}