题目:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
思路:
递归直观,但n太大时递归层数太多,时间复杂度高;采用循环实现,时间复杂度为O(N)
还有一种复杂度O(log(N))的方法,利用矩阵性质[f(n) f(n-1); f(n-1),f(n-2)]=[1 1; 1 0]^(n-1),转化为求矩阵乘方,但这种方法并不是很实用。
代码:
在线测试OJ:
https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tpId=13&tqId=11160&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
AC代码:
class Solution {
public:
//循环
int Fibonacci(int n) {
if(n < 0)
return -1;
if(n == 0)
return 0;
if(n == 1)
return 1;
int n_1 = 1;
int n_2 = 0;
int f_n;
for(int i = 2; i <= n; i++)
{
f_n = n_1 + n_2;
n_2 = n_1;
n_1 = f_n;
}
return f_n;
}
};
递归的也贴在这,但牛客网上无法通过。
class Solution {
public:
//递归
int Fibonacci(int n) {
if(n < 0)
return -1;
if(n == 0)
return 0;
if(n == 1)
return 1;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
};
还有更高效的算法,待补充。。。