首先是要这个求解的问题,适合用递归方法来进行求解。找到这个递归解法结束递归的条件。递归函数中,首先第一个语句就是如果满足递归条件,就直接返回确定的值,否则返回使用递归方法求解的表达式。
我们提供的服务有:成都做网站、网站建设、外贸营销网站建设、微信公众号开发、网站优化、网站认证、洪江ssl等。为千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的洪江网站制作公司
我解释下具体执行过程:
printf("%d!=%ld\n",num,mul(num));
这里调用了mul(num)方法,第一个值是5,进入方法后,
if(51) x=5*mul(5-1);
这里又调用了一次方法,
mul(5-1)
这里就是递归调用了,需要把4的值带入方法又执行一次,
变成:if(41) x=4*mul(4-1);
这里又调用了一次方法,
mul(4-1)
依次类推为:if(31) x=3*mul(3-1);
if(21) x=2*mul(2-1);
这里看懂了没,递归函数关键字在“递”和“归”,相当于循环,一直到条件不满足时在“归”,一步步return直到第一个调用的mul方法。在return主函数。
也就是从最后一次调用
mul(2-1)时
n的值为1了,执行else语句,结束“递”方法操作,return语句,返回X=1,那么接下来变为
if(21) x=2*1,返回X=2,接下来变为:
if(31) x=3*2,返回X=6,接下来变为:
if(41) x=4*6,返回X=24,接下来变为:
if(51) x=5*24,返回X=120 结束递归调用。
希望你能看懂,还有问题在补充吧!
第一级递归:n=483,i=n/10=48≠0
注意此时先递归调用convert(48),待递归返回再输出当前n的个位数字n%10=3
第二级递归:n=48,i=n/10=4≠0
此时继续递归调用convert(4),待递归返回再输出当前n的个位数字n%10=8
第三级递归:n=4,i=n/10=0
此时递归终止,先输出当前n的个位数字n%10=4
再返回上一级递归输出8,最后返回第一级递归输出3
因此最终输出为:4 8 3
递归函数有三点要求:
1,递归的终止点,即递归函数的出口
2,不断的递归调用自身
3,递归函数主体内容,即递归函数需要做的事情
ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根据不同的需要合并,比如,有时候递归函数的主体就是返回调用下层函数所得到的结果。
具体例子如下:
void fun(int n)
{
if(n=0) return; //1 这是递归的终点,即出口
fun(n-1); //2、递归函数自身的调用
coutnendl; //3 递归函数的主体内容
}
2,3合并的情况
int fun(int n)
{
if(n=0) return 0;
return fun(n-1)+fun(n-2); //2 3合并
}