当前位置:   article > 正文

用函数的递归实现n!_用函数的递归调用求n!

用函数的递归调用求n!

函数的递归:       

 

        在调用一个函数的过程中又出现直接或者间接地调用该函数本身,称为函数的递归调用

用递归法求n!:

     首先要知道        5!=4!\times 5、

                               4!= 3!\times 4、

                                ...

                               1!=1

可以由递归公式表示:n!=1(n=0,1) ;n!=n\times(n-1)!(n>1)

程序如下:

  1. #include <stdio.h>
  2. int main(int argc, const char *argv[])
  3. {
  4. int fac(int n); //fac函数的声明
  5. int n = 0;
  6. int y = 0;
  7. printf("input an integer number:");
  8. scanf("%d",&n); //终端输入所求阶乘的数
  9. y = fac(n);
  10. if(y != 0) //输出有效结果
  11. printf("%d!=%d\n",n,y);
  12. return 0;
  13. }
  14. int fac(int n){ //定义fac函数
  15. int f = 0;
  16. if(n < 0 || n > 12){ //n的值不能小于0且受数据类型的限制
  17. printf("data error!\n");
  18. }else if(n == 0 || n == 1){
  19. f = 1; //0和1的阶乘是1
  20. }else{
  21. f = fac(n-1)*n;
  22. }
  23. return f;
  24. }

 运行结果:

                ​​​​​​​        

 程序分析:

        每次调用fac函数后,其返回值 f 应返回到fac函数调用的地方,因为该递归终止的条件为n=0或者n=1。例如,当n=2的时候函数体中的 “f=fac(1)*2” 当取到返回值fac(1)时,函数才会得到结果。

注意:

        程序中的变量为int类型,多数系统分配的数内存为4字节

        函数fac返回值能表示的最大的无符号数为(2^32-1),所以本程序n最大的有效取值为12,输入比12大的数字或许会有结果,但是错误的结果,在程序编写时要排除这些情况。

        可通过改变参数和函数类型来改变程序计算的范围,例如:float型或者double型。

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

闽ICP备14008679号