warning,Python 递归危险
来源:互联网 发布:网络征婚可靠吗 编辑:程序博客网 时间:2024/05/01 02:41
source:http://www.ideawu.net/blog/archives/660.html
最近, 我在 review 组员的 Python 代码时, 发现了一个递归调用, 我立即发现了其中的问题.
先说一下编程中递归. 只有会用递归, 并且能随心应手地写出递归程序的程序员, 才是已经入门了的程序员. 不过, 许多程序员并没有发现编程中的递归的一个限制: recursion depth limit, 逻辑上的递归可以无次数限制, 但语言执行器或者程序堆栈会限制递归的次数.
例如一个 Cpy 编程语言(用 C 语法写 Python 代码)例子:
function func(i){ if(i < 1000000){ try{ func(i + 1); }catch(Exception e){ print 'maximum recursion depth exceeded', i; print e; return; } }}func(1);
因为 Python 语言有递归次数的限制, 试验结果是 997 次.
sys.setrecursionlimit( limit)
而 C 语言的限制, 是程序堆栈的大小限制, 超过之后, 会产生 stack overflow. 比如下面这个 C 语言的例子在我的环境下只递归了 511 次:
void func(int i){ int buf[1000]; if(i < 100000){ printf("depth = %d\n", i); func(i + 1); }}int main(int argc, char **argv){ func(1); return 0;}
再回到最先开始提到的, 我 review 发现的例子, 我为什么能一眼就发现那个递归有问题呢. 因为, 那段代码是一段按行分析文本的程序, 当发现某一行不符合条件时, 程序会递归调用分析函数递归地分析下一行. 显然, 如果连续 997 行文本不符合条件, Python 程序就会崩溃退出了.
Related posts:
- C++ hash_map(unordered_map)和map性能对比
- 用脚本语言开发网游 – C整合Python
- 众所期待 – 真正的类C通用型脚本编程语言出世了!
- Cpy是如何打败Python的
- Windows Python select标准输入输出
- warning,Python 递归危险
- 动态规划&递归-危险的组合
- python忽略warning
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- 危险
- B2C网站树形目录的数据库查询
- 缓冲区溢出原理
- 反射
- Shell编程基础
- 正则表达式
- warning,Python 递归危险
- 高并发高流量网站架构
- LeetCode题解:Minimum Window Substring
- MySQL Compressed Backup
- JAVA多线程
- 常见排序算法比较和实现
- ubuntu下gcc安装及编译运行的过程
- Android CTS 测试研究
- 从max到maya到U3D