python递归深度是如何计算的?

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堆栈的深度 编辑我不知道您为什么会达到递归限制,但您可能没有达到,因为这个函数(我对它进行了修改,使它在堆栈上打印的次数最多

这是我的函数Foo:

def Foo(n=10):
    if 1<n<=10:
        for i in range(1, 10):
            #### Do_Something
            Foo(n-1)
def Foo(n=10):
如果1of
sys.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)