首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

高手们帮小弟我分析下着选递归啊

2012-03-25 
高手们帮我分析下着选递归啊!private void button1_Click(object sender, EventArgs e){Test()}int resul

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

热点排行