2014-12-25 49 views
0

我不明白Koch曲线是如何使用这个函数的。ThinkPython练习5.4 Koch曲线

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) 

fd(t,n)命令表示对象't'将向前移动量'n'。rt(t,120)和lt(t,60)命令意味着对象't'将以给定角度向右或向左转。

所以我推测,笔者使用递归的功能,但我不明白它是如何与自身重申了很多次,因为我是一个初学者,并有非常有限的逻辑能力。

作为一个例子说我称为科赫(吨,100)if子句是通过如N> 3导致的下一行代码是米/ 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子句尽快激活,我们可以运行if条件代码块,用fd(t,1.23)代替所有koch(t,m)语句。我看到它FD(),LT(),FD(),室温(),FD,LT(),FD()应尽快活化仅一次正< 3为n = 1.23或它再次重申与1.23/3.0和代码再次运行与科赫(吨,0.41)?也许是因为else子句不存在可以取消该功能,但是该功能确实结束了,如果我为n选择了更高的值,那么koch曲线也会更大,这使我更加困惑,因为在那里我可以看到没有行代码告诉我重复这个函数n次。

我对于缺乏透明度的道歉,因为我不知道如何解释清楚。

+0

在“龟图”,这是我想象在这里使用,当“海龟”(毫无疑问't'这里)向前移动,它吸引在它的移动在画布上(如果它的拿着笔的“尾巴”倒下了,这里毫无疑问被认为是这种情况)。你是否完全理解“龟图形”,例如“fd(t,10); lt(t,90)”四次重复会画出一个正方形? –

+0

对不起,我编辑了评论,希望它更清楚。我真的不知道该函数的重复部分是如何工作的 – firebird92

回答

0

我想你可能会从错误的一端望着这尝试去解决它。首先考虑如果您拨打koch(t,1)会发生什么情况。该if语句评估为假的,你可以看到这样的事情被绘制:

_/\_ 

现在,如果你叫什么koch(t,3)?尝试在一张纸上,你会看到每个直线在上面的图片是由类似形状代替...

+0

感谢您的评论非常有帮助,并且在我试图解决这个问题时指出了正确的方向。 – firebird92

0

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

要进一步了解递归,包括递归如何在代码块中存在两个或多个递归函数(如此问题)时提供的工作,我已将一个链接添加到有用的线程,并希望它可以帮助其他任何被阻止的人这个问题,并需要帮助理解递归。

Understanding recursion