技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 查看专题: 递归
    最近, 我在 review 组员的 Python 代码时, 发现了一个递归调用, 我立即发现了其中的问题. 先说一下编程中递归. 只有会用递归, 并且能随心应手地写出递归程序的程序员, 才是已经入门了的程序员. 不过, 许多程序员并没有发现编程中的递归的一个限制: recursion depth limit, 逻辑上的递归可以无次数限制, 但语言执行器或者程序堆栈会限制递归的次数.
    在程序设计中,递归(Recursion)是一个很常见的概念,合理使用递归,可以提升代码的可读性,但同时也可能会带来一些问题。 下面以阶乘(Factorial)为例来说明一下递归的用法,实现代码为PHP: 如果安装了XDebug的话,可能会遇到如下错误: Fatal error: Maximum function nesting level of ’100′ reached, aborting! 注:这是XDebug的一个保护机制,可以通过max_nesting_level选项来设置。
    某服务器上一个 cron job 是 shell 脚本调用 Java 程序,最近老是报 Segmentation fault, 每次看见此信息 /bin/sh: line 1: 4285 Segmentation fault java ... 总觉得无处下手,bash 的问题?Java 版本不对?信息量太少了。其实遇到这种事情不能谎,表面上没有信息一定要挖出信息来。今天仔细一看,这个脚本把标准输出重定向到一个日志文件去了,于是去看日志。这个程序的主体是对一个信息列表做循环,恰好在每个循环的关键部分开始前、结束后都会写一条日志。其目的是为了计时,不过正是这两条日志让我很快找到了错误缘由,因为发现日志文件的末尾只有一个开始前的,说面在这个循环的处理过程里面发生了 Segmentation fault. 找出程序的源代码,发现循环里面调用的方法有一个是递归的,情况就开始明朗了,猜测就是递归
    我记得早前有同事问, 正则是否能处理括号配对的正则匹配. 比如, 对于如下的待匹配的字符串: ((())) 就是一个括号配对的字符串. 而对于如下的待匹配字符串: ((() 则不是一个括号配对的字符串. 在以前, 这种情况, 正则无法处理, 最多只能处理固定层数的递归, 而无法处理无线递归的情况... 而在perl 5.6以后, 引入了一个新的特性: Recursive patterns, 使得这种需求可以被正确的处理.
    本想先找本算法和数据结构的书参考一下,但转念一想:不如考考自己的总结和逻辑表达能力。 loop、iterate、traversal和recursion这几个词是计算机技术书中经常会出现的几个词汇。众所周知,这几个词分别翻译为:循环、迭代、遍历和递归。乍一看,这几个词好像都与重复(repeat)有关,但有的又好像不完全是重复的意思。那么这几个词到底各是什么含义,有什么区别和联系呢?下面就试着解释一下。 循环(loop),指的是在满足条件的...
    这个ecshop里面的一个函数,感觉很好,再次跟大家分享。
    -_-居然忘掉鸟while、for这么好的哥们。。。昨日晚上于家中折腾CrumbNavigation,即所谓面包屑导航。。一直在为递归纠结。。哎。。香烟过后,恍然大悟啊。。T.T…这个教训不能忘。
    下面是从openid的php代码中看到的一个递归创建目录的函数,感觉是比较简洁的,值得参考
    输入:一个字符串,单词用某个特定符号分割(比如空格)输出:一个字符串,单词顺序和原串相反看到倒置,一般的做法是用栈,要么自己建个数组、要么STL,或者递归用程序栈。
[ 共9篇文章 ][ 第1页/共1页 ][ 1 ]
赞助商广告
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1