2014-12-25 45 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