帮忙解释下这道递归的执行过程

来源:百度知道 编辑:UC知道 时间:2024/05/20 01:35:40
int dunno(int m)
{
int value;
if(m == 0) value = 3;
else value = dunno(m - 1) + 5;
return value;
}

void main()
{

printf("%d\n", dunno(3));
}

首先.printf要输出dunno(3)函数的返回值
然后要得到这个返回值,就计算该函数
用3来调用该函数,只要3不等于0
就就会执行else分支,然后执行这个分支的时候
要计算value的值,就必须先计算出 函数dunno(2)的返回值
然后加5再赋给value,因此你就再要先执行dunno(2),即再次调用
dunno(int m) 这个函数,不过此时传递给形参m的值是2,因为实参是2
然后比较m与0的值,不等,继续执行else分支
然后继续计算dunno(1),则又开始调用该函数.不过此时的调用该函数的实参变为了1,然后将1传递给m,比较m与0的值.因为不等,所以继续执行
else分支,继续计算dunno(0),这次调用传递的实参是0,也就是说m为0
比较发现,相等,则执行if分支.即value = 3;也就是计算出了dunno(0)函数的返回值3,计算出了dunno(0).则一步一步进行回代.最后计算出dunno(3)

dunno(3) = dunno(2)+5 = dunno(1)+5+5 = dunno(0)+5+5+5 = 3+5+5+5

d3=d2+5
d2=d1+5
d1=d0+5
d0=3

d3=d2+5 d2= d1+5 d1=d0+5 d0=3 所以 d3=18