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)
我不明白在同一个函数中多次调用函数的递归函数是如何工作的(我相信是多次递归)。我想知道是否有人可以向我解释一下。
我是初学者,正在学习如何在 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)