当前位置:   article > 正文

C语言递归 —— 求斐波那契数列的n项_c语言递归计算n项斐波那契

c语言递归计算n项斐波那契

众所周知,斐波那契数列 是一个特殊的数列

如1,1,2,3,5,,,,n;第三项等于他的前两项之和 推导出递推公式就是

“f(n) = f(n - 1) + f(n - 2)”

那么我们今天就利用此公式来求取斐波那契数列的第n项 具体是如何实现的呢

码上见分晓

  1. //斐波那契数列 求第n项
  2. //递归
  3. int DG(int n)
  4. {
  5. if (n >= 3)//根据上面的例子设置的条件限制 如果给上边的例子前加0 这里的n也可以是大于等于2
  6. {
  7. return DG(n - 1) + DG(n - 2);//有没有想到上面的地推公式
  8. }//有没有感觉从后往前算 他不知道前面是什么数 不断地分支(就像树杈)知道推到最开始的数
  9. else
  10. {
  11. return 1;
  12. }
  13. }
  14. int main()
  15. {
  16. int n = 0;
  17. scanf("%d", &n);
  18. int d = DG(n);
  19. printf("%d", d);
  20. return 0;
  21. }

改代码有个弊端 就是计算了很多重复项

所以说但他计算的项数较大时他会消耗太多时间 降低效率 那么递归就不适合求(不是不能求)

既然不能用递归 那么就用其他方法(条条大道通罗马)

那我们试一试循环(从前往后计算)

将前两个数加起来赋给第二个数 再将第二个数赋给第一个数 如此反复

但思考该过程 你会发现 并没有重复计算那一个项

  1. //非递归(循环迭代)
  2. int DG(int n)
  3. {
  4. int a = 1;
  5. int b = 1;
  6. int c = 1,i = 3;
  7. while (i <= n)
  8. {
  9. c = a + b;
  10. a = b;
  11. b = c;
  12. i++;
  13. }
  14. return c;//n小于3时返回1 大于等于时返回相加之后的值 (和递归的n >= 3讲解一样)
  15. }
  16. int main()
  17. {
  18. int n = 0;
  19. scanf("%d", &n);
  20. int d = DG(n);
  21. printf("%d", d);
  22. return 0;
  23. }

运行之后的效果就不演视了 图片上传失败

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/518878
推荐阅读
相关标签