当前位置:   article > 正文

C语言——递归函数(求斐波那契数列第n项的值)_c语言函数递归调用斐波那契数列第n项

c语言函数递归调用斐波那契数列第n项

递归函数是指在一个函数中直接或者间接调用函数本身。

例如,设一个无返回值函数为fun,同时,设置一个整形形参变量为a

  1. void fun(int a)
  2. {
  3. if(a>0)
  4. {
  5. fun(a-1);
  6. printf("%d\n",a);
  7. }
  8. }

此时,在fun函数中,就直接调用了fun函数本身。

上面的fun函数就是一个递归函数。

接下来,我们来讨论一下递归函数优点以及缺点

优点:

可以很简单的解决一些较难的问题;

下面举斐波那契数列求第n项的值的例子

相信大家都听说过斐波那契数列,特别是当它在数学题中出现时,真是十分的头疼,而现在,我们使用C语言中的递归函数就能很简单的解决这个问题,代码如下

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int fun(int n) //n表示斐波那契数列的第n项
  4. {
  5. //斐波那契数列的第一项和第二项都是1
  6. if (1 == n||2==n)
  7. return 1;
  8. //从第三项开始,后一项是前两项的和
  9. else
  10. return fun(n - 1) + fun(n - 2);
  11. }
  12. int main(void)
  13. {
  14. int a=0;
  15. //输入要求的斐波那契数列的项数a
  16. printf("请输入斐波那契数列的项数:\n");
  17. scanf("%d", &a);
  18. //输出第a项斐波那契数列的值
  19. printf("%d", fun(a));
  20. system("pause");
  21. return 0;
  22. }

缺点

1.比较容易爆栈(可以理解为运行程序时占用内存空间过多,超出规定的内存空间,也可以简单的理解为会报错)

例如,就像上面的斐波那契数列一样,如果我们输入30000,此时就会爆栈(报错),是因为我们在求第30000项斐波那契数列的值时占用了过多的内存空间

所以,当我们在写一些追求效率的程序时,要谨慎使用递归函数


2.难于阅读,难于维护

例如本文章第一个代码块的程序

如果,我们要求fun(5),此时的代码展开是这样的,而这仅仅是一个简单的递归函数,只需要输出一个数字,且递归次数也不多,如果换了更复杂的函数,则它的阅读性更差,我们总不能每写一次递归函数就写一次程序图,读都读不懂,就更别说维护了

 所以,递归函数,难于阅读,难于维护

这就是递归函数了,大家如果有兴趣,也可以尝试写一些其他的递归函数,比如n的阶乘,十进制整数变二进制函数等等。

谢谢大家的阅读,同时,如果大家看到我的博客中的不足与缺点,请尽快私信我,我会尽全力改正,大家对我的鞭策就是我坚持下的动力!

再次谢谢大家的阅读,谢谢!

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

闽ICP备14008679号