递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。
在鸡西梨树等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、做网站 网站设计制作按需制作,公司网站建设,企业网站建设,品牌网站建设,营销型网站建设,外贸网站制作,鸡西梨树网站建设费用合理。
然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。
fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!
我给你举个简单的例子你就明白了,你可以假设n=3
然后代入这个函数,a(3)=a(2)+5;而a(2)=a(1)+5;a(1)=1
所以最后就是a(3)=1+5+5=11…
同理你可以算出a(10)=1+5*9=46
满意请采纳
第一级递归: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
没有递归,你把自己想的太高端了
先执行fun(d)也就是fun(1)
d=5,d=d+p=5+1=6
打印了6
然后执行fun(a+fun(d))=fun(3+6)=fun(9)
d=6,d=d+p=6+9=15
打印了15
最后打印fun(a+fun(d))
等于15
这个很好理解啊,你看看你输入的参数什么就可以了。
你函数的声明是void fuck ( int n ,char o, char t, char th)
第一次调用你是fuck ( n, 'A','B','C');这时,o=A,t=B,th=C,所以输入
printf ("%c %c %c\n",t,o,th);就是BAC,
然后你fuck(n-1,t,o,th);,这时o=原来的t=B,t=原来的o=A,th=C,输出
printf ("%c %c %c\n",t,o,th);就是ABC了如此类推
从主函数fun(6,x)开始调用。调用的时候,实参6和x将自身的值传递给形参n,s,接着,开始执行fun函数体内的语句第一次调用:判断if(n==0||n==1),此时的n值为6,不满足条件,执行else部分语句。 fun(n-1,f1);fun(n-2,f2);先调用fun(n-1,f1);而fun(n-2,f2);需要当fun(n-1,f1);符合if条件以后才轮到它执行第二次调用:此时,形参n=6转变为实参n,fun(n-1,f1)等价于fun(5,f1),继续判断,if(n==0||n==1),又不满足条件,于是,重复之前的操作,转向else部分执行。 fun(n-1,f1);fun(n-2,f2);此时的n=5,同样是先调用fun(n-1,f1);后面那个fun(n-2,f2);同样处于等待状态,等待前面的 fun(n-1,f1);符合IF条件后才轮到它执行,于是,fun(n-1,f1);就这样一层一层执行下去,每执行一次,n的值减一,当n=1的时候,执行if部分,这时,便可以在fun(n-1,f1);执行完毕只有继续执行fun(n-2,f2);,接着,返回前一次调用的状态,开始执行fun(n-2,f2);比如当n=2的时候,执行完fun(2-1=1,f1)以后,便开始执行fun(2-2=0,f2);和它后面的语句,最终,函数返回上一次调用的状态,即fun(3,f1);此时,fun(3,f1)已经执行完毕,因为之前我们已经把fun(2,f1)执行完了,接着,应该执行的是fun(3-2=1,f2);当这个函数最后终也符合if部分要求,又返回到前面的fun(4,f1),执行完后,开始执行fun(4,f2),这样一个流程。通常来说,递归可以简化代码,但同时也会增加系统开销并且让程序阅读的时候要比正常的顺序程序难以理解一些。不过,现代的硬件飞速发展,用递归是完全可以的。