python 中的多重递归如何工作

How do multiple recursions work in python

我不明白在同一个函数中多次调用函数的递归函数是如何工作的(我相信是多次递归)。我想知道是否有人可以向我解释一下。

我是初学者,正在学习如何在 python 中编写代码。我到了一个阶段,使用 turtle,向我展示了一个递归函数,我不得不猜测它会画什么。我完全错了,但它画了一个树状图。

import turtle

t = turtle.Turtle()
def draw (t, length, n):
    if n == 0:
        return
    angle = 50 
    t.fd(length*n) 
    t.lt(angle)
    draw(t, length, n-1)
    t.rt (2*angle)
    draw(t, length, n-1)
    t.lt(angle)
    t.bk(length*n)

我完全理解它是如何绘制第一个分支的,但是有一次 n=1 我感到困惑,因为我假设在那个时候调用 draw(t, length, n-1) 时 n=0 所以函数返回但什么也没有更多发生。然而,它做了一些完全不同的事情,我想知道操作顺序是什么以及为什么这样做。我知道它的作用,但我就是不知道为什么。

以你的例子为例,当程序在 n=1 时执行 draw(t, length, n-1),那么你是对的,它再次进入 draw n=0 并点击 return.

接下来发生的是你 return 到前一个 draw 就在调用 n-1 之后,下一行要执行的是 t.rt (2*angle)

你应该可以自己手写出来。

举个例子:

t = turtle.Turtle()
draw(t, 5, 1)

情况是这样的:(调用堆栈分两列显示)

[original call]            [recursive call]
    if n == 0:
         #nothing
    angle = 50 
    t.fd(length*n) 
    t.lt(angle)
    draw(t, length, n-1)
                             if n == 0:
                                  return
    t.rt (2*angle)
    draw(t, length, n-1)
                             if n == 0:
                                  return
    t.lt(angle)
    t.bk(length*n)