首页新闻找找看学习计划

请高手指点递归的问题

0
悬赏园豆:30 [待解决问题]
 1 public partial class Default2 : System.Web.UI.Page
 2 {
 3 
 4     protected void test(int i)
 5     {
 6         Response.Write(i+"  ");
 7         if (i > 0)
 8             test(i - 1);
 9         else
10             Response.Write("<------>");
11             Response.Write(i + "&nbsp;&nbsp;");
12     }
13     protected void Page_Load(object sender, EventArgs e)
14     {
15         test(10);
16     }
17 }

为什么输出的结果会是:10  9  8  7  6  5  4  3  2  1  0  <------>0  1  2  3  4  5  6  7  8  9  10

牛大的主页 牛大 | 初学一级 | 园豆:177
提问于:2013-07-12 17:47
< >
分享
所有回答(4)
0

这个结果很正确啊~最好是单步调试下就比较好理解。看具体的输出顺序吧~

protected void test(int i)
     {
          Response.Write(i+"&nbsp;&nbsp;");              (1.3.5.7.9.11.13.15.17.19.21)
          if (i > 0)
              test(i - 1);                               (2.4.6.8.10.12.14.16.18.20)  
          else
             Response.Write("<------>");                 (22)
             Response.Write(i + "&nbsp;&nbsp;");         (23.24.25.26.27.28.29.30.31.32)
     }
     protected void Page_Load(object sender, EventArgs e)
     {
         test(10);
     }            
幻天芒 | 园豆:36594 (高人七级) | 2013-07-12 18:08

就是觉得从0——10这些值,我就是想不通

支持(0) 反对(0) 牛大 | 园豆:177 (初学一级) | 2013-07-13 17:16

@牛大: 是有点难想,我也是看单步但知道这结果的,哈哈~<------>之后值执行了else后来的那个Response。

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2013-07-13 18:13

@牛大: 问了下朋友,递归就是函数调用自己,如果把递归的方法手动写全了,那么上面就有10个TEST函数,这10个test函数在条件结束后都会调用自己的第11行代码,就会产生这个结果了。

支持(0) 反对(0) happydaily | 园豆:674 (小虾三级) | 2013-07-23 15:46

@happydaily: 嗯,不错~

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2013-07-23 18:51
0

从0到10这段的确很诡异。

happydaily | 园豆:674 (小虾三级) | 2013-07-12 22:06
0

我调试了下,确实有些问题,

 Response.Write(i + "&nbsp;&nbsp;");
        if (i > 0)
        {
            test(i - 1);
        }
        else
        {
            Response.Write("<------>"); Response.Write(i + "&nbsp;&nbsp;");
        }

如果写成这样就跟预想的一样了,如果不加大括号,输出的是 <------>0  1  2  3  4  5  6  7  8  9  10

却不是 <------>0  <------>1  <------>2  <------>3...

还是想不通

墨猦 | 园豆:668 (小虾三级) | 2013-07-13 17:55
1
else
     Response.Write("<------>");
     Response.Write(i + "&nbsp;&nbsp;");
由于你else没有括号,所以
Response.Write(i + "&nbsp;&nbsp;");不属于else,又由于是递归,
所以Response.Write(i + "&nbsp;&nbsp;");肯定会被执行11次,这就是递归的魅力,BTW:平时记得给if else打括号

Eddiew | 园豆:286 (菜鸟二级) | 2013-07-15 09:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册