用递归的方法求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)!
或不多说,下面请看笔者所写代码:
//用递归的方法求n!
#include <stdio.h>
int k=0;
long int fac(int n)
{
long int answer;
k++;
//显示fac(n)函数第几次调用及参数n的值
printf("the %d call,n=%d\n", k, n);
if ((n == 0) || n == 1)
return 1;
else
answer = n * fac(n - 1); //多次调用fac函数
return (answer); //返回值
}
int main()
{
int m;
scanf_s("%d", &m);
printf("the result is: %d! =%d\n", m, fac(m));
return 0;
}
在这里,我们可以看出,计算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),的调用都需要.............
文章若有不规处,请读者多多指教!笔者将会:有则改之,无则加勉!!
- 点赞
- 收藏
- 关注作者
评论(0)