当前位置:   article > 正文

用递归的方法求n!

用递归的方法求n!

用递归的方法求n!

在写此函数之前,我们需要知道,函数递归是什么??

顾名思义:函数递归,着重在”递归“俩字,对于函数,我想大部分初始者已经不陌生,在这里笔者就不做过多的讲述!

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

下面,笔者将用代码加分析的方法带领大家初步认识:函数的递归调用!

用递归的方法求n!;

对于数学知识,求阶乘0!=1;1!=1;2!=1*2;3!=1*2*3;4!=1*2*3*4;5!=1*2*3*4*5

但是仔细思考就会发现n!=n*(n-1)!我想这么浅显易懂的道理,读者应该都能看懂(数学在代码中占据很大地位)

因此阶乘=1(n=0,1)或者=n*(n-1)!

或不多说,下面请看笔者所写代码:

  1. //用递归的方法求n!
  2. #include <stdio.h>
  3. int k=0;
  4. long int fac(int n)
  5. {
  6. long int answer;
  7. k++;
  8. //显示fac(n)函数第几次调用及参数n的值
  9. printf("the %d call,n=%d\n", k, n);
  10. if ((n == 0) || n == 1)
  11. return 1;
  12. else
  13. answer = n * fac(n - 1); //多次调用fac函数
  14. return (answer); //返回值
  15. }
  16. int main()
  17. {
  18. int m;
  19. scanf_s("%d", &m);
  20. printf("the result is: %d! =%d\n", m, fac(m));
  21. return 0;
  22. }

在这里,我们可以看出,计算5的阶乘需要5次调用函数fac(n);

第一次用参数值5去调用fac(n),返回值answer=5*fac(4);因为表达式中含有函数fac(4),

因此,需要用参数值为4 第二次去调用函数fac(n),此时返回值为answer=4*fac(3),.

依次类推,当最后以1为参数值调用时,返回值answer=1;

本次调用结束后返回到调用位置从而计算出fac(2)=2*fac(1)=2*1=2;

接着在返回到调用fac(2)的位置,从而计算出fac(3)=3*fac(2)=3*2=6;

接着在返回调用..........最后返回到fac(5)=120;

最后answer=120;  把结果输出!

在这个过程需要我们知道:函数的正确书写格式,函数的调用方法,if语句的f判断(0为假,非0为真);从而正确书写该代码!

至于转结果,笔者将以5!=120为列,进行运转

  在这里,每一次调用时:调用了多少次,并且调用该次数的n值,都能清晰的看出来!

在该代码中:answer = n * fac(n - 1);显得尤为重要,毕竟在该函数的递归调用中每一次的fac(n),的调用都需要.............

文章若有不规处,请读者多多指教!笔者将会:有则改之,无则加勉!!

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

闽ICP备14008679号