python中的递归深度限制

之前我写过一篇关于递归和迭代的文章,迭代是人,递归是神。之所以这么推崇递归,简而言之,就是因为递归的思想解决问题更加精准、人性化,同时在实现的时候,需要的分析和思考更多,换来的则是更加简洁的代码。代码越少,bug也就越少,这是在编程领域永恒的定律。

那么是不是什么情况都适合用递归呢?这个问题我在之前的博客中也已经讲明了,视情况而定。递归是需要深厚的逻辑分析能力才能驾驭的一种问题分割处理方式。如果对这方面的能力或者这种处理方式没有熟练掌握的话,极容易造成递归的失败,在产品中造成一些不可预知的风险和错误。下面就是我根据最近的工作中遇到的一些问题,进行的总结。

python中使用递归,如果递归的边界没有处理好的话,容易出现如下错误,RuntimeError: maximum recursion depth exceeded。但是Python中的递归深度到底能允许多少层呢?我们来写个程序测试一下

#! env python
def recurse(depth):
print depth
depth += 1
try:
recurse(depth)
except Exception as e:
print e
return
recurse(1)

需要注意的是,递归中不要在except代码块,调用本身,这是一个严重的逻辑错误!

执行这段程序当递归深度达到限制的时候就会触发RuntimeError,此时程序中的try…except…模块就可以捕获到异常,并且递归返回。根据输出我们可以判断出,Python中默认的递归深度为999。当递归深度超过999时,就触发了RuntimeError,递归被终止。

那么如果我们的递归需要的深度真的很大怎么办呢?到底有没有办法修改Python的递归深度限制呢?答案是肯定的。

如果更改递归深度的限制,可以执行如下命令修改限制。

import sys
sys.setrecursionlimit(10000) #例如这里设置为一万

但是这种情况极少出现,一般不要这样做!

 

No comments yet.

Leave a comment

Comment form

All fields marked (*) are required

返回顶部
跳到底部