当前位置:   article > 正文

C语言——递归函数之计算阶乘

C语言——递归函数之计算阶乘

1.介绍:

C语言中的递归函数是一种特殊的函数,它会调用自己来完成某项任务。递归函数通过把大问题分解为更小的相同类型的问题来解决,直到达到一个简单到可以直接解决的边界情况(称为基准情形或基本情况)。递归函数通常包含两个主要部分:

(1)基准情形(Base Case):递归必须有一个或多个基准情形,当到达这个基准情形时,函数不会再递归调用自身,而是返回一个值。基准情形是递归的出口,防止无限递归。

(2)递归步骤(Recursive Step):这是函数调用自己的部分,每次调用时,问题的规模都会减小,直到达到基准情形。

2.计算阶乘示例:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int getFactor(int num)
  4. {
  5. if(num > 12){
  6. puts("越界!"); //当数据值越界时,终止程序
  7. exit(-1);
  8. }
  9. int result;
  10. if(num == 1){
  11. result = 1; //基准情形,当达到这个基准情形时函数不会再递归调用自身,而是返回一个值。目的是防止无限递归
  12. }else{
  13. result = getFactor(num - 1) * num; //递归步骤,函数调用自己,同时问题规模减小直至到达基准情形
  14. }
  15. return result;
  16. }
  17. int main()
  18. {
  19. int num;
  20. int numFactor;
  21. printf("请输入所求的阶乘数:\n");
  22. scanf("%d",&num);
  23. numFactor = getFactor(num);
  24. printf("%d的阶乘是:%d\n",num,numFactor);
  25. return 0;
  26. }

输出将是:

  1. 请输入所求的阶乘数:
  2. 11
  3. 11的阶乘是:39916800

3.注意:

我们在程序中加入了一个判断模块,因为一个整型数据占4个字节,32位,能表示的最大数据为2的32次方:4,294,967,296 < 13! = 6,227,020,800。故我们设置当数据大于12的时候,终止程序。

当数据大于12时,输出将是:

  1. 请输入所求的阶乘数:
  2. 15
  3. 越界!
  • 递归函数虽然简洁,但如果不当使用(如没有明确的基准情形或递归步骤导致问题规模不减小),可能会导致栈溢出错误。
  • 对于某些问题,递归可能不是最高效的解决方案,特别是对于大量数据的处理,因为每次函数调用都会占用一定的栈空间,并且函数调用本身也有开销。在这些情况下,迭代(循环)可能是更好的选择。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号