黑马程序员技术交流社区

标题: 求递归问题 [打印本页]

作者: 吕柳根    时间: 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