赞
踩
众所周知,斐波那契数列 是一个特殊的数列
如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; }
运行之后的效果就不演视了 图片上传失败
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。