python递归深度是如何计算的?
这是我的函数Foo:python递归深度是如何计算的?,python,recursion,Python,Recursion,这是我的函数Foo: def Foo(n=10): if 1<n<=10: for i in range(1, 10): #### Do_Something Foo(n-1) def Foo(n=10): 如果1ofsys.setrecursionlimit指定递归限制实际上是python堆栈的深度 编辑我不知道您为什么会达到递归限制,但您可能没有达到,因为这个函数(我对它进行了修改,使它在堆栈上打印的次数最多
def Foo(n=10):
if 1<n<=10:
for i in range(1, 10):
#### Do_Something
Foo(n-1)
def Foo(n=10):
如果1ofsys.setrecursionlimit
指定递归限制实际上是python堆栈的深度
编辑我不知道您为什么会达到递归限制,但您可能没有达到,因为这个函数(我对它进行了修改,使它在堆栈上打印的次数最多):
count=0
最大计数=0
def Foo(n=10):
全局计数
全局最大计数
计数=计数+1
如果(计数>最大计数):
最大计数=计数
打印最大计数
如果我的计算有错误,我道歉。函数实际上不会在foo(10)上崩溃,只是简单地进行了40亿次调用,但正确地停止了。但是factorial(10)
只有在调用“混合”时才会发生。IMHO最大深度约为10(如果我尝试…)@glglgl——你说得对。这不应该达到递归限制(据我所知)。无法复制——我让它执行得很好。堆栈深度最大为10。什么使你认为最大深度是10 ish?@kindall,因为Foo(n)只调用Foo(n-1),如果n可能在你的原始代码中调用Foo(i-1)
,而不是Foo(n-1)
?静态分析表明最大深度是10。然而,为了防止大脑出现问题,我在函数的开始和结束添加了一个计数器,用于跟踪深度。10点停。在n=10的第一次循环迭代中,循环将进行以下调用:Foo(9);傅(9),;傅(9),;傅(9),;傅(9),;傅(9),;傅(9),;傅(9),;傅(9),;傅(9),代码>是的,你是对的,但这使它更加有效。我已经运行foo(10)大约10分钟了,我们有130000个电话,它仍然在运行
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)