Forum
>>
Principianti
>>
Curva di Koch
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da openedelko |
2017-01-26 22:52:00 - Curva di Koch
|
Ho da qualche giorno iniziato a studiare sul libro 'pensare in python' e mi sono imbattuto in un esercizio che chiede di scrivere una funzione che attraverso turtle disegni una curva di koch. Probabilmente non ho chiarissime le meccaniche della ricorsione, ma non riesco a capire come sia possibile che questo programma riesca a fare quanto detto, soprattutto dato il fatto che manca l'istruzione che dica a turtle di andare avanti:
import turtle def koch(t, n): """Draws a koch curve with length n.""" if n < 10: t.fd(n) return m = n/3 koch(t, m) t.lt(60) koch(t, m) t.rt(120) koch(t, m) t.lt(60) koch(t, m) Inoltre ho notato che togliendo l'istruzione if dal programma questo entra in una ricorsione infinita quando mi pare di capire che in questo caso serva solo a bloccare l'esecuzione nel caso si inserisca un valore di n minore di dieci, sbaglio? Grazie mille in anticipo --- Ultima modifica di ㎝ in data 2017-01-27 15:18:11 --- |
|
Scritto da ㎝ |
2017-01-27 15:34:04 - Re: Curva di Koch
|
Non è vero, turtle.fd(n) muove la tartaruga avanti di n pixel.
Sì (nel senso di "sì, sbagli" . Oltre a fermare la ricorsione, il passo base (sovente gli algoritmi ricorsivi sono espressi in termine di una condizione di uscita (detta appunto "passo base") e l'elaborazione ricorsiva vera e propria (chiamata "passo ricorsivo")) disegna anche un segmento della curva. Se elimini il passo base non esci mai dalla catena di chiamate (ok, non è vero: Python ha un parametro sys.getrecursionlimit che impedisce l'esplosione del pc). Per verificarne il comportamento, prova a chiamare la funzione per valori di n pari a 9 (disegna un semplice trattino lungo 9), 27 (disegna la curva base), 81 (iterazione successiva), e così via...
Prego, ㎝ --- Ultima modifica di ㎝ in data 2017-01-27 15:51:19 --- THE 🍺-WARE LICENSE (Revision ㊷):
<㎝🐌🐍.🇮🇹> wrote this post. As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝ |
|
Scritto da openedelko |
2017-01-27 17:45:00 - Re: Curva di Koch
|
Grazie ancora per la risposta. Finalmente ho capito cosa sbagliavo, non calcolavo che ad ogni chiamata il valore di n doveva essere diviso per 3, e quindi la funzione perdeva di senso.
--- Ultima modifica di openedelko in data 2017-01-27 18:00:08 --- |
Pagina: 1
Esegui il login per scrivere una risposta.