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

发布日期:2018-03-01    浏览次数:1005
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#的错误

image

 

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

image

 

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

 

 

参见:

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

 

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

本文网址:https://www.wyxxw.cn/blog-detail-2-6-805.html

返回列表

非特殊说明,本文版权归原作者所有,转载请注明出处

提示:本站所有资源仅供学习与参考,请勿用于商业用途。图片来自互联网~如侵犯您的权益,请联系QQ:1067507709.

提示:转载请注明来自:https://www.cnblogs.com/zbw911/archive/2014/01/22/3529459.html 。 转载人:momo