使用递归在Python中绘制分形树

苏穆克·阿特雷亚(Sumukh Atreya)

我正在尝试使用Python绘制一棵分形树。特别是,我试图理解下面的代码,发现这里

def tree(branchLen,t):
    if branchLen > 5:
        t.forward(branchLen)
        t.right(20)
        tree(branchLen-15,t)
        t.left(40)
        tree(branchLen-10,t)
        t.right(20)
        t.backward(branchLen)

具体来说,我的问题是我不了解最后一步(即t.backward(branchlen)完成之后会发生什么branchlen在此步骤之后,变量的值如何变化?我尝试遵循算法并使用铅笔和纸手动构造树,但无济于事。任何人的帮助将不胜感激。提前致谢!

阿巴内特

我不了解最后一步(即t.backward(branchlen)完成后会发生什么

什么都没发生; 您只需返回到呼叫者,呼叫者将在tree呼叫后的那一行继续通话。

当然,因为这是一个递归函数,所以您的调用者通常将是的另一个实例tree(除非您一直处于栈顶)。

在此步骤之后,变量branchlen的值如何变化?

没有。但是,每个实例tree都有其自己的本地人。

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

首先,我们打电话说tree(25, t)在里面,branchLen25

现在,它做到了t.forward(25)t.right(20)然后就可以了tree(25-15, t)这是的新电话tree,在此新电话内branchLen10

因此,该新呼叫执行t.forward(10)t.right(20)然后就可以了tree(10-15, t)这是的新电话tree,在此新电话内branchLen-5因此,由于if失败,该新呼叫将立即返回,然后我们返回到branchLenis的呼叫10可以t.left(40),然后调用tree(10-10, t)同样,一个新的呼叫wherebranchLen0立即返回,因此我们回到呼叫branchLenis 10我们先做t.right(20),然后t.backward(10)再返回。

现在我们回到外部调用,那里branchLen是25。它继续进行t.left(40),然后是call tree(25-10, t)这是又一个新的呼叫tree,但时间branchLen15不是10一切都与上一段几乎相同,因此我不再重复,它以该调用返回为结尾。

现在我们回到外部调用,这里又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时,当它返回时,它将返回到中的t.left(40)tree

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用递归在Python中绘制分形树

来自分类Dev

在python3上使用递归的分形树

来自分类Dev

在Python中绘制一棵分形树

来自分类Dev

在python中使用基本递归绘制分形时出错

来自分类Dev

使用递归算法绘制分形

来自分类Dev

使用递归绘制树

来自分类Dev

WebGL中的递归分形2D树图

来自分类Dev

递归中的分形Pifagor树

来自分类Dev

使用递归在python中绘制模式

来自分类Dev

使用递归在python中绘制模式

来自分类Dev

pyqt中的分形->递归问题

来自分类Dev

C#使用递归创建分形

来自分类Dev

在Python中绘制树的边缘

来自分类Dev

在python中使用递归在通用树中查找节点

来自分类Dev

如何使用C#GDI +图形和Windows窗体递归绘制希尔伯特曲线分形?

来自分类Dev

在python中从树中递归删除项目

来自分类Dev

绘制分形火焰

来自分类Dev

绘制分形火焰

来自分类Dev

使用递归绘制嵌套的三角形

来自分类Dev

Python中的递归任意树高度

来自分类Dev

Python 使用递归查找树的路径

来自分类Dev

如何在python中绘制生存树

来自分类Dev

使用treemapify在R中绘制树图

来自分类Dev

Javascript 在画布上绘制分形,递归保存和恢复问题

来自分类Dev

使用Java绘制由圆组成的分形图案

来自分类Dev

使用Java绘制由圆组成的分形图案

来自分类Dev

Python递归族树

来自分类Dev

Swift中的树递归

来自分类Dev

使用递归绘制雪花