Python 2.7 ThinkPython练习5.4科赫曲线

Python 2.7 ThinkPython练习5.4科赫曲线,python-2.7,Python 2.7,我不明白科赫曲线是如何使用此函数绘制的 def koch(t, n): """Draws a koch curve with length n.""" if n<3: fd(t, n) return m = n/3.0 koch(t, m) lt(t, 60) koch(t, m) rt(t, 120) koch(t, m) lt(t, 60) koch(t, m) def k

我不明白科赫曲线是如何使用此函数绘制的

def koch(t, n):
    """Draws a koch curve with length n."""
    if n<3:
        fd(t, n)
        return
    m = n/3.0
    koch(t, m)
    lt(t, 60)
    koch(t, m)
    rt(t, 120)
    koch(t, m)
    lt(t, 60)
    koch(t, m)
def koch(t,n):
“”“绘制长度为n的科赫曲线。”“”
如果n3指向下一行代码m/3.0,那么100/3.0就是33.3。这就导致了koch(t,33.3),当n>3时,它仍然会再次重申生产koch(t,11.1)等等,直到我们重申它,直到我们来到koch(t,1.23)

现在,当n=1.23且if子句在n<3时激活时,我们可以运行if条件代码块,将所有koch(t,m)语句替换为fd(t,1.23)。在我看来,当n=1.23时,当n<3时,fd()、lt()、fd()、rt()、fd、lt()、fd()应该只激活一次,还是用1.23/3.0再次重复,用koch(t,0.41)再次运行代码?可能是因为不存在else子句来取消函数,但是函数确实结束了,如果我为n选择一个更高的值,koch曲线也会更大,这使我更加困惑,因为在代码中我看不到任何一行命令我重复该函数n次


很抱歉,我不明白如何清楚地解释这一点

我想你可能是从错误的角度看待这个问题,试图解决这个问题。首先考虑如果调用<代码>科赫(t,1)会发生什么。
if
语句的计算结果为false,您可以看到这样的结果:

_/\_

现在,如果您调用
koch(t,3)
?在一张纸上试一试,你会看到上面图片中的每条直线都被类似的形状所取代…

我在阅读了有关递归的内容并在控制台中测试了一些打印语句后发现了我的问题。我不明白的是,为什么选择一个更大的n(长度)会产生一个更大的分形。基本上,因为在递归树上选择较大的n会产生更多的节点(子节点),所以选择较大的n会产生更多的子节点,并且只有最后一个节点(空节点)在n<3时才会开始绘制,此时如果n较大,将有许多空节点

为了进一步理解递归,包括当这个问题所提出的代码块中有两个或更多递归函数时,递归是如何工作的,我提供了一个链接,指向一个有用的线程,希望它能帮助其他陷入这个问题并需要帮助理解递归的人


在我想象中使用的“海龟图形”中,当“海龟”(毫无疑问是
t
在这里)向前移动时,它会在移动的画布上绘制(如果它的持笔“尾巴”向下,毫无疑问这里就是这样)。你完全理解“海龟图形”吗?例如,四次重复“fd(t,10);lt(t,90)”将如何画出一个正方形?对不起,我编辑了评论,希望它能让你更清楚。我真的不明白函数的重复部分是如何工作的。你对“t”参数做了什么?谢谢,你的评论很有帮助,在我试图弄明白这一点的时候,它指向了正确的方向。