你的代码应该是这样的结果:程序是一行一行的执行的,只有一行执行完成之后才能执行下一条语句!在你的代码中 GetCount()方法嵌套了GetCount()方法,那么,程序递归几次,就直接跟你传入的参数有关,传入参数是3,GetCount()方法就应该调用4次!每次调用一次完成后会输出一个inVal 的值!因此;当第一此调用 GetCount(3)时,程序运行,第一到达else后,程序会再此进入GetCount(2),此时的GetCount(3)没有执行完成,所以现在不会输出inVal 的值,当程序进入GetCount(2)的else部分时,又会进入GetCount(1);此时的GetCount(2)同样也没有执行完成,暂时也不会执行输出语句,当执行GetCount(1)的时候,程序又一次进入GetCount(0),GetCount(0)执行时,此时inVal 的值为0,!因此程序Return终止,不再执行输出语句!现在GetCount(0)完成了,跳出第一层,同时GetCount(1)也执行完成,输出inVal=1,
再跳出第二层,GetCount(2)执行完成,输出inVal=2,继续跳出第3层,GetCount(3)执行完成,
输出inVal=3!
打个比方, 方法1(方法2);程序总是先执行括号里的方法,然后在执行括号外的方法
已写的代码递归循序应该为一下代码的顺序,程序是先输出最最后一次的结果,再一次输出第3次,第2次,第1次:注意逻辑
static void Main()
{
int inVal=3;//第一层开始,inVal=3,将执行else语句
if (inVal == 0)
{
return;
}
else
{
inVal--;//此时inVa=2,执行else语句
if (inVal == 0)
{
return;
}
else
{
inVal--;//此时inVa=1,将执行else语句
f (inVal == 0)
{
return;
}
else
{
inVal--;此时inVa=0,将执行IF语句,
if (inVal == 0)
{
return;//第4层if执行完成,程序return终止,不再执行该层输出语句,返回上第3层
}
else
{
***********
}
Console.WriteLine("{0}", inVal);//没有输出值
}
Console.WriteLine("{0}", inVal);//第三层else语句执行完成!输出1,然后返回第2层
}
Console.WriteLine("{0}", inVal);//第二层else语句执行完成!输出2,然后返回第1层
}
Console.WriteLine("{0}", inVal);//第一层else语句执行完成!输出3,程序终止
}
}
你集合以上程序的运行规律来理解,仅供参考!!
对递归的看法不能仅限于你所说的走这句走那句的,递归实际就是对栈的运用。
第一次 GetCount(3) 执行到GetCount(inVal - 1);后进入GetCount(2),还有一个操作就是将此时的Console.WriteLine("{0}", inVal);此时的值为3,压入栈。
以此类推,整个过程压入3次,顺序是3,2,1.
而栈的原则是先进后出,所以return回来的结果应该是 1,2,3
因为要Console.WriteLine()就要从下一层的递归GetCount返回,而且Console.WriteLine是在GetCount之后。你可以考虑把else那个分支直接变成GetCount(inVal-1)看看是否帮助理解