递归算法
[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为负数。你就发现原来第一个可以退出,而第而个没有办法退出了。
[解决办法]
什么叫语法错误?错误能得到正确答案? 对于递归还是自己走一遍比较清楚!