首页 > 其他 > 详细

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

时间:2014-01-22 15:52:50      阅读:388      评论:0      收藏:0      [点我收藏+]
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#的错误

bubuko.com,布布扣

 

 
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++的错误

bubuko.com,布布扣

 

分析一下就大概明白了,由于递归数据放在栈里,递归不断的压栈,.NET framework Runtime 就抛出异常。 C++ 也是同样的问题,以后对于可预知的递归可以用,对于不可预知的就不要用了。

 

 

参见:

http://baike.soso.com/v111972.htm

 

注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
递归的缺点:
递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

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

原文:http://www.cnblogs.com/zbw911/p/3529459.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!