众所周知,斐波那契数列 是一个特殊的数列
如1,1,2,3,5,,,,n;第三项等于他的前两项之和 推导出递推公式就是
“f(n) = f(n - 1) + f(n - 2)”
那么我们今天就利用此公式来求取斐波那契数列的第n项 具体是如何实现的呢
码上见分晓
//斐波那契数列 求第n项
//递归
int DG(int n)
{
if (n >= 3)//根据上面的例子设置的条件限制 如果给上边的例子前加0 这里的n也可以是大于等于2
{
return DG(n - 1) + DG(n - 2);//有没有想到上面的地推公式
}//有没有感觉从后往前算 他不知道前面是什么数 不断地分支(就像树杈)知道推到最开始的数
else
{
return 1;
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int d = DG(n);
printf("%d", d);
return 0;
}
改代码有个弊端 就是计算了很多重复项
所以说但他计算的项数较大时他会消耗太多时间 降低效率 那么递归就不适合求(不是不能求)
既然不能用递归 那么就用其他方法(条条大道通罗马)
那我们试一试循环(从前往后计算)
将前两个数加起来赋给第二个数 再将第二个数赋给第一个数 如此反复
但思考该过程 你会发现 并没有重复计算那一个项
//非递归(循环迭代)
int DG(int n)
{
int a = 1;
int b = 1;
int c = 1,i = 3;
while (i <= n)
{
c = a + b;
a = b;
b = c;
i++;
}
return c;//n小于3时返回1 大于等于时返回相加之后的值 (和递归的n >= 3讲解一样)
}
int main()
{
int n = 0;
scanf("%d", &n);
int d = DG(n);
printf("%d", d);
return 0;
}
运行之后的效果就不演视了 图片上传失败
相比之下 循环的代码效率更高 可以计算较大的项
这就是这次的讲解 加油铁汁~