斐波那契数列
描述:
现在要求输入一整数n,请输出斐波那契数列的第n项(从0开始,第0项为0,第1项为1)。n <=39
示例:
输入:4
返回值:3
斐波那契数列是最经典的入门题,它的标准公式是:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2) (n>=3)
递归法。
int Fibonacci(int n)
{
if (n <2)
{
return n;
}
return Fibonacci(n - 2) + Fibonacci(n - 1);
}
递归法时间复杂度:o(n^2) , 导致内存溢出。
利用for循环
int Fibonacci(int n)
{
if (n == 0 || n == 1)
return n;
int f1 = 0;
int f2 = 1;
int f3 =0;
for (int i = 2; i <= n; i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
时间复杂度:O(n).
python实现:
dic = {} # 字典
def fib_recur_with_dic(n):
global dic
if n <= 1:
return n
if n in dic:
return dic[n]
else:
result = fib_recur_with_dic(n-1) + fib_recur_with_dic(n-2)
dic[n] = result
return result
优化后:
def fib_loop_nolist(n):
if n <= 1: # 0,1 直接返回
return n
a, b = 0, 1
for i in range(2, n+1): # 从2开始
a, b = b, a + b
return b
单层循环,时间复杂度为 O(n),与优化后的递归解法复杂度相当。