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 + " "); 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
这个结果很正确啊~最好是单步调试下就比较好理解。看具体的输出顺序吧~
protected void test(int i) { Response.Write(i+" "); (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 + " "); (23.24.25.26.27.28.29.30.31.32) } protected void Page_Load(object sender, EventArgs e) { test(10); }
就是觉得从0——10这些值,我就是想不通
@牛大: 是有点难想,我也是看单步但知道这结果的,哈哈~<------>之后值执行了else后来的那个Response。
@牛大: 问了下朋友,递归就是函数调用自己,如果把递归的方法手动写全了,那么上面就有10个TEST函数,这10个test函数在条件结束后都会调用自己的第11行代码,就会产生这个结果了。
@happydaily: 嗯,不错~
从0到10这段的确很诡异。
我调试了下,确实有些问题,
Response.Write(i + " ");
if (i > 0)
{
test(i - 1);
}
else
{
Response.Write("<------>"); Response.Write(i + " ");
}
如果写成这样就跟预想的一样了,如果不加大括号,输出的是 <------>0 1 2 3 4 5 6 7 8 9 10
却不是 <------>0 <------>1 <------>2 <------>3...
还是想不通
else Response.Write("<------>"); Response.Write(i + " ");
由于你else没有括号,所以Response.Write(i + " ");不属于else,又由于是递归,
所以Response.Write(i + " ");肯定会被执行11次,这就是递归的魅力,BTW:平时记得给if else打括号