最近再给群里的小伙伴们讲解递归算法,老是有人问怎么解读,什么意思,今天就分享个小技巧出来,免得以为我喜欢藏私。
void main()
{
int a=-1;
a=funA(7);
}
在此运算中,当i>3的时候,程序就会一直执行语句1,和语句2,这个时候堆栈的值为7.6.5.4
当i的数字运算到3的时候,也就是i=3,这个时候整个句子最后的返回值只有3,接下来执行的句2并4出栈的返回值也是4,5出栈返回5,6出栈返回6,7出栈返回7.并赋值给i,所以这个时候a的值为7.
void main()
{
int a=-1;
a=funB(7);
}
在这儿,当i>3的时候还和上面一样,栈的值还是7654,
当i=3的时候,执行34句且返回值为3,当i=4的时候,因为在pc里在第二句及if的分支里面,所以接下来必须跳过else的判断,567也是一样的没有返回值,所以当i=3的时候,因为对i的内存块已提前赋值为3,所以这个时候的a,只能等于3.因为其它值,跳过了对内存赋值这个步骤。