2012-10-26 84 views
2

这是我的函数foo:如何计算python递归深度?

def Foo(n=10): 
    if 1<n<=10: 
     for i in range(1, 10): 
      #### Do_Something 
      Foo(n-1) 

我得到RuntimeError: maximum recursion depth exceeded,这是令人沮丧的,因为我期待Foo的递归深度是10+,远不及python的默认500个限制。 我知道我会用这个Foo获得大量的堆栈,但这是可以忍受的。我试图增加sys.setrecursionlimit,但仍然收到RuntimeError错误。有什么建议么?

+3

无法重现 - 我让它执行得很好。堆栈深度最大值为10. –

+0

什么使得您认为最大深度为10-ish? – kindall

+0

@ kindall,因为如果n <= 10,Foo(n)只会调用Foo(n-1)。 – sloth

回答

3

sys.setrecursionlimitdocumentation指定递归限制实际上是python堆栈的深度。

EDIT我不知道你为什么要达到递归限制,但是你可能没有打这个函数(我已经修改了它,以便它打印堆栈的最大时间):

count = 0 
maxcount = 0 

def Foo(n=10): 
    global count 
    global maxcount 
    count = count + 1 

    if(count > maxcount): 
     maxcount = count 
     print maxcount 

    if 1<n<=10: 
     for i in range(1, 10): 
      #### Do_Something 
      Foo(n-1) 
    count = count - 1 

Foo(10) 
+0

但是'因数(10)'只有在电话发生“混合”时才是这种情况。恕我直言,最大深度约为10(这是如果我尝试...) – glglgl

+1

@glglgl - 你说得对。这应该不会达到递归限制(据我所知)。 – mgilson

-1

我的计算道歉有误。这个函数实际上并不会在foo(10)上崩溃,而只是产生了40亿次调用,但是正确地停止了。

+0

在第一次循环迭代中,其中n = 10,循环将进行以下调用:'Foo(9); FOO(9); FOO(9); FOO(9); FOO(9); FOO(9); FOO(9); FOO(9); FOO(9); FOO(9); ' – Junuxx

+1

是的你是对的,但这使得它更糟 –

+0

我一直在运行富(10)约10分钟,我们在130000电话,它仍然会 –