高手们帮我分析下着选递归啊!
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和一些函数式编程语言里大量使用。