class Program
{
static void Main(string[] args)
{
sub(0);
}
private static void sub(int count)
{
if (count > 100000)
return;
Console.WriteLine(count);
sub(++count);
}
}
C#的错误
void sub(int i)
{
if (i > 10000)
return;
printf("%d
", i);
sub(++i);
}
int _tmain(int argc, _TCHAR* argv[])
{
sub(0);
return 0;
}
C++的错误
分析一下就大概明白了,由于递归数据放在栈里,递归不断的压栈,.NET framework Runtime 就抛出异常。 C++ 也是同样的问题,以后对于可预知的递归可以用,对于不可预知的就不要用了。
参见:
http://baike.soso.com/v111972.htm
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
递归的缺点:
递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。