使用过多的递归出现错误,“System.StackOverflowException”类型的未经处理的异常在 mscorlib.dll 中发生

来源:互联网 时间:1970-01-01

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\r\n", 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)数据的结构形式是按递归定义的。(树的遍历,图的搜索)


递归的缺点:


递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。


相关阅读:
Top