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

递归算法,该如何解决

2012-04-22 
递归算法[codeC/C++][/code]int func(int n)//第一个递归函数{int sum1if(n0){sum n * func(n - 1)

递归算法
[code=C/C++][/code]
int func(int n) //第一个递归函数
{
  int sum=1;
if(n>0)
  {
  sum = n * func(n - 1);
  }
  return sum;
}

int func(int n) //第二个递归函数
{
  int sum=1;
  if(n==1)
  {
sum =1;
  }
  else
  {
sum = n * func(n-1);
  }
  return sum;
}

//这是一个求n!的函数,第一个和第二个结果都对,但两个最大
//的区别是什么,还有就这个例子来说递归出口到底咋回事,

[解决办法]
区别就是两个函数的最后返回值不一样吧 大概看了下

n>0是第一个函数的出口
n==1是第二个函数的出口

出口就是让递归结束的条件~~
[解决办法]
这两个没有本质上的区别,只是第一个比较简洁,第二个写得有点臃肿。

从判定条件来看,第一个的条件可以改写为 (n>1),这样可以稍微快那么一丁点。

第二个在n==1的时候就会结束递归。而第一个要等到n==0的时候才会结束递归。
[解决办法]
递归程序都需要有一个出口才能退出递归。我个人觉得第一个函数比第二个函数要好。如果n为负数。你就发现原来第一个可以退出,而第而个没有办法退出了。
[解决办法]
都一样的原理,就是分情况的方式不一样!!!
[解决办法]
第一个的递归出口条件是:if(n>0)
[解决办法]
第一个好,同意楼上的观点,第一个对负数能作有效的处理,还有出口就是为了推出递归的函数,防止出现类似死循环一样的死递归
[解决办法]
同意楼上:递归程序都需要有一个出口才能退出递归。我个人觉得第一个函数比第二个函数要好。如果n为负数。你就发现原来第一个可以退出,而第而个没有办法退出了。
[解决办法]
什么叫语法错误?错误能得到正确答案? 对于递归还是自己走一遍比较清楚!

探讨

引用:

递归程序都需要有一个出口才能退出递归。我个人觉得第一个函数比第二个函数要好。如果n为负数。你就发现原来第一个可以退出,而第而个没有办法退出了。
是不是第一个严格来说在语法上是错误的,我怎么感觉好像sum=1不是递归出口啊

热点排行