黑马程序员技术交流社区
标题:
求递归问题
[打印本页]
作者:
吕柳根
时间:
2013-6-28 13:07
标题:
求递归问题
本帖最后由 吕柳根 于 2013-6-28 23:06 编辑
class Program
{
public void Count(int inVal)
{
if(inVal==0)
return;
Count(inVal-1);
Console.WriteLine("{0}",inVal);
}
static void Main()
{
Program pr=new Program();
pr.Count(3);
Console.ReadKey();
}
}
为什么结果是:
1
2
3
作者:
吕柳根
时间:
2013-6-28 13:08
大师快点出现吧!
作者:
leayon
时间:
2013-6-28 14:01
其实楼主你下断点调试一下就明白了。
你跟我一开始一样,应该是走入思维误区了!
在该函数进行递归调用时,在递归调用的这块代码之后的程序并没有被执行完,它会重新给自己传入一个新的参数,从头开始执行,直到碰到return,就会跳出当前inValue=0的情况,既然是跳出当前正被执行的函数,那么它会跳到哪里呢?肯定是inValue=1时的这一次递归了,因为我们在传入参数0进行递归调用的时候,inValue=1的这一次递归调用并没有被执行完,它的后面还有一个输出语句没被执行。后面的同理。。。
作者:
杨威yangwei
时间:
2013-6-28 15:17
因为这个是递归,递归到最里面后还要一层一层回来才算完。
单步调试的话就会发现开始 inval=3 继续递归 count(2) >> count(1) >> count(0) >> return,然后接着一层一层返回 执行 count(1) 这层还没完的后面的Console.WriteLine(inval) 即Console.WriteLine("1")
继续上一层 即Console.WriteLine("2")
顶层 Console.WriteLine("3")
所以最后结果是 1 2 3
作者:
黄文超
时间:
2013-6-28 18:14
楼上的都不错,递归的概念早忘了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2