高手们帮我分析下着选递归啊!
private void button1_Click(object sender, EventArgs e)
         {
             Test();
         }
         int result = 0;
         string msg="\n 函数的递归调用 : \r\n";
         public void Test()
         {
             msg+="调用语句 : \r\n";
             msg+="result = sum(6);\r\n";
             msg+="调用步骤 :\r\n";
             result=sum(6);
             msg+="计算结果 : \r\n";
             msg+="result = "+result+"\r\n";
             this.textBox1.Text += msg;
         }
         //计算当前步骤加和值
         public int sum(int m)
         {
             if(m==0)
                 return 0;
             else
             {
                 msg+="语句 : result = " +m+ "+sum(" +(m-1)+"); \r\n";
                 int num = sum(m - 1);  //问题:这里开始递归的,递归完后 m=0;走完这句的时候,接着下面的代码了
                 result = m + num;      //可是后来在最后的3句又开始循环了,m的值也开始由1递增到6了,不懂啊!
             }                          //高手帮忙分析下,谢谢~!
             return result;
         }
     }
------解决方案--------------------
正常,遇到终止条件m==0就开始逐步回填。一开始m = 6,int num = sum(5);所以要先取得sum(5)的返回值才能继续,而要求sum(5),又要先求sum(4),...这样一直到执行sum(0)时才得到返回值0,这样再取得sum(1)的返回值是1, sum(2)的返回值是2,...所以m的值一直递增到6。
这是递归的一个粗糙的描述。你可以看一看课本,特别是要弄清它的堆栈实现,这样对递归才算理解的比较准确。
递归很重要,特别是在Prolog和一些函数式编程语言里大量使用。