斐波那契数列
递推法
编写程序,用递推法计算斐波那契(Fibonacci)数列的第n项。
求解思路:斐波那契(Fibonacci)数列为0,1,1,2,3,5,8,13,……,即:
F(0)=0,F(1)=1,
F(n)=F(n-1)+F(n-2),当n>1时。
用递推法编写的程序为:
#include<stdio.h>
int Fib(int n)
{
int f0=0,f1=1,f,i;
if(n==0||n==1)
{
return n;
}
for(i=2;i<=n;i++)
{
f=f0+f1; //由前两步结果推出当前结果
f0=f1; //原前一步当作下一次的前两步
f1=f; //当前结果当作下一次的前一步
} //在进行向前传递时,要注意传递的时序
return f;
}
void main()
{
int n=7;
printf("Fib(%d)=%d\n",n,Fib(n));
}
执行结果
递归法
所谓递归算法就是在函数过程中直接或间接调用自己,还是求斐波那契数列的问题,相应的递归程序为:
#include<stdio.h>
int Fib(int n){
if(n==0||n==1)
{
return n; //结束项
}
else
{
return Fib(n-1)+Fib(n-2); //递归项
}
}
void main()
{
int n=7;
printf("Fib(%d)=%d\n",n,Fib(n));
}
执行结果
递归算法简单,但不能无限递归。因此,算法中需要设置递归结束条件。
递归法的时间效率较低,原因是重复计算太多。
例如:计算Fib(5),总计算次数为2Fib(6)-1=15。