A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吕柳根 中级黑马   /  2013-6-28 13:07  /  1241 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吕柳根 于 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

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

4 个回复

正序浏览
楼上的都不错,递归的概念早忘了
回复 使用道具 举报
因为这个是递归,递归到最里面后还要一层一层回来才算完。
单步调试的话就会发现开始 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

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
其实楼主你下断点调试一下就明白了。
你跟我一开始一样,应该是走入思维误区了!
在该函数进行递归调用时,在递归调用的这块代码之后的程序并没有被执行完,它会重新给自己传入一个新的参数,从头开始执行,直到碰到return,就会跳出当前inValue=0的情况,既然是跳出当前正被执行的函数,那么它会跳到哪里呢?肯定是inValue=1时的这一次递归了,因为我们在传入参数0进行递归调用的时候,inValue=1的这一次递归调用并没有被执行完,它的后面还有一个输出语句没被执行。后面的同理。。。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
大师快点出现吧!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马