十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
我解释下具体执行过程:
创新互联公司主营高碑店网站建设的网络公司,主营网站建设方案,成都app开发,高碑店h5微信小程序搭建,高碑店网站营销推广欢迎高碑店等地区企业咨询
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 结束递归调用。
希望你能看懂,还有问题在补充吧!
首先是要这个求解的问题,适合用递归方法来进行求解。找到这个递归解法结束递归的条件。递归函数中,首先第一个语句就是如果满足递归条件,就直接返回确定的值,否则返回使用递归方法求解的表达式。
#include stdio.h
int cube(int num);//你的立方函数的声明
void main()
{
int num = 3;//设置限制,是1的立方加到num的立方
printf("%d",cube(num));
}
int cube(int num)//递归函数
{
if(num==1) //从1的立方开始加.这是结束条件
return 0;
else
return cube(num-1) + num * num * num;
}
递归:函数下一次的参数是函数自身上一次的输出值。(也就是说,函数的下一次取决于上一次的结果,自身依赖)。也正是因为如此,这样的函数必须有终止值(即递归必须有一个条件限定)。否则就会进入死循环。“递归”分成“直接递归”、“简介递归”。具体可以参考我的博客(点击, ,查看,有代码有具体示例解释)。 给出一个求n!的C递归:int Fun(int n){ if (n==0 || n==1) return 1; return Fun(n-1)*n;}
相当于循环,要有判断条件,传递进去的参数要变化,满足条件调用自身,不满足条件就开始一层一层返回。简单例子:
int
f(int
i){
int
sum=0;
if(i0)
sum+=f(i-1);
return
sum;
}
main(){
int
a=10;
printf("%d",f(a));
}