【问题标题】:Is there a way to make a recursion method with unlimited depth in Python?有没有办法在 Python 中创建一个无限深度的递归方法?
【发布时间】:2013-04-14 01:08:49
【问题描述】:

例如,在像这样的图上编写一些算法时

def f(graph):
    #graph is dictionary of pairs vertex_i:{set of edges (i,j)} for 1<=i,j<=n
    def g(vertex):
        for vertex1 in graph:
            do sth
            ...
            for (i,j) in graph[vertex1]:
                ...
                g(j)#recursive call
        ...
        return ...

    return g(1)

有限的递归深度有时很烦人,因为如果你不得不避免递归,代码会变得更长更复杂。 有没有办法达到无限深度? 也许你可以用下面的方法描述你对问题的一般解决方案

def nthNumber(n):
    if n==1: return 1
    else: return nthNumber(n-1)+1

(我知道这很简单,请不要给出“你应该只写 nthNumber(n): return n ”之类的答案——我对一般解决方案很感兴趣)。感谢您的帮助!

【问题讨论】:

  • 让我换一种说法:有没有可能做一个最大的递归方法。深度 104 还是 105?
  • 您可以将递归限制设置为 10**4,但最终可能会导致 python 崩溃(它可能超过了安全限制 - 这取决于操作系统)。另外:stackoverflow.com/questions/2917210/…

标签: python recursion infinite depth


【解决方案1】:

无限递归需要无限资源;每个函数调用都需要一个堆栈条目,并且只有有限的内存来保存它们。所以,,你不能有无限的递归深度。

可以 提高限制,方法是致电sys.setrecursionlimit()

【讨论】:

  • Unlimited != Infinite,他要求的是 un'limited',这意味着 Python 不会对此施加任何限制。
  • @itsneo:这只是...分裂的头发。您可以将限制提高到超出操作系统或可用硬件允许的范围。关键是你会遇到 a 限制。
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 2015-07-19
  • 1970-01-01
  • 2012-07-01
  • 2020-01-25
  • 2010-10-30
  • 1970-01-01
  • 2019-07-04
相关资源
最近更新 更多