写出斐波那契数列的递归与迭代代码,并分析时间和空间复杂度。
斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、……
用数学公式表示出来就是:
F(1)= 1,F(2)=1 (n=1,2)
F(n)=F(n-1)+ F(n-2) (n>2)
有三种比较常用的求解第n项斐波那契数列的方法:递归法、迭代法、通项公式法。
①递归法:
Fib(1) = 1 [基本情况]
Fib(2) = 1 [基本情况]
对所有n > 1的整数:Fib(n) = (Fib(n-1) + Fib(n-2)) [递归定义]
关键代码:
if(n == 1|| n== 2)
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2);
}
③迭代法:这种方法相对于递归法来说在时间复杂度上减小了不少,但代码相对就要复杂些了。
#include<stdio.h>
int f(int n);