使用过多的递归出现错误,“System.StackOverflowException”类型的未经处理的异常在 mscorlib.dll 中发生
2024-08-27 21:41:31
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)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
递归的缺点:
递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
最新文章
- x
- USACO翻译:USACO 2013 DEC Silver三题
- 自制Unity小游戏TankHero-2D(3)开始玩起来
- Servlet部分细节介绍
- UE4 性能优化方法(工具篇)
- 安装nfs服务器
- SVN与TortoiseSVN实战:冲突详解(二)
- Sublime Text 2 常用快捷键
- delphi 基础之二 面向对象概念初步
- IOS 关于ipad iphone5s崩溃 解决
- bzoj1486
- android 根据网络来获取外网ip地址及国家,地区的接口
- 程序ajax请求公共组件-- app-jquery-http.js
- 201521123098 《Java程序设计》 第5周学习总结
- Git之(四)分支管理
- 索引-mysql
- JavaEE 要懂的小事:一、图解Http协议
- luogu1608 路径统计 (spfa)
- python自动化开发-[第十三天]-javascript
- 剑指Offer_编程题_9