python 画树 递归_用递归在Python中绘制分形树

I do not understand what happens after the completion of the final step (that is, t.backward(branchlen)).

什么也不会发生;您只需返回到您的调用者,然后在tree调用之后的行继续。在

当然,因为这是一个递归函数,您的调用方通常是tree的另一个实例(除非您一直处于堆栈的顶部)。在How does the value of the variable branchlen change after this step?

没有,但是tree的每个实例都有自己的局部变量。在

例如,让我们从顶部开始。在

首先,我们打电话,说tree(25, t)。在这里,branchLen是25。在

现在,它执行t.forward(25)和{}。然后它会tree(25-15, t)。这是对tree的新调用,在这个新调用中,branchLen是{}。在

所以,这个新调用执行t.forward(10)和{}。然后它会tree(10-15, t)。这是对tree的新调用,在这个新调用中,branchLen是{}。因此新调用立即返回,因为if失败,我们返回到branchLen是{}的调用。它执行t.left(40),然后调用tree(10-10, t)。再一次,一个新的调用,其中branchLen是0,它立即返回,所以我们回到这个调用中,branchLen是{}。我们做t.right(20),然后t.backward(10),然后返回。在

现在我们回到外部调用,其中branchLen是25。它继续使用t.left(40),然后调用tree(25-10, t)。这又是对tree的新调用,但是时间branchLen是15,而不是{}。所有的东西都和最后一段差不多,所以我不再重复它,最后是那个调用返回。在

现在我们回到外部调用,其中branchLen又是25。它继续执行t.right(20),然后t.backward(25),然后完成,然后返回。在

既然我们的顶级代码调用了它,我们就完成了。在

如果递归仍在困扰您,让我们制作一个非递归版本,它只执行2个步骤,而不是N个步骤:def tree(branchLen,t):

if branchLen > 5:

t.forward(branchLen)

t.right(20)

little_tree(branchLen-15,t)

t.left(40)

little_tree(branchLen-10,t)

t.right(20)

t.backward(branchLen)

def little_tree(littleBranchLen,lt):

if littleBranchLen > 5:

lt.forward(littleBranchLen)

lt.right(20)

lt.left(40)

lt.right(20)

lt.backward(littleBranchLen)

现在应该很明显,当tree第一次调用little_tree时,它返回到tree中的t.left(40)行。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值