La programmazione in LOGO spesso usa una tecnica chiamata ricorsività. In questo capitolo esploreremo la
ricorsività con semplici esempi e disegneremo alla fine una curva frattale chiamata “fiocco di neve di Van
Koch”.
Prima di tutto:
Una procedura è ricorsiva se invoca se stessa
Questa procedura è ricorsiva perché la procedura ex1 è invocata nell’ultima riga della medesima procedura. Durante l’esecuzione osserviamo che la tartaruga ruota su stessa verso destra all’infinito. Per interrompere il programma dobbiamo cliccare il bottone di STOP.
Per il secondo esempio impariamo tre nuove primitive:
Il programma ripete la stessa procedura ogni secondo ottenendo i secondi di un orologio.
La primitiva Stampa visualizza del testo nell’area dello storico dei comandi. Stampa si aspetta un argomento, un
elenco o una parola.
Per esempio: Stampa "hello Stampa [Essere o non essere] (non dimenticare le virgolette "quando vuoi scrivere
solo una parola).
Invoca la procedura ex3 0 e ferma il programma con il bottone di STOP.
Come esercizio modifica il programma per visualizzare i numeri con un intervallo di 2.
Vogliamo ora visualizzare tutti i numeri interi maggiori di 100 che sono divisibili per 5. Dobbiamo solo modificare il programma così:
e quindi invocare: ex3 100
Tutti gli esempi precedenti vengono eseguiti all’infinito consumando piano piano tutta la memoria disponibile
fino a quando XLOGO fermerà il programma. Normalmente, però, la ricorsione viene fermata dal
programma stesso quando si verifica una determinata condizione. Esempi di condizioni sono i seguenti
esempi:
Se 2+1=3 [Stampa [è vero]]
Se 2+1=4 [Stampa [è vero]][print [è falso]]
Se 2+5=7 [Stampa "vero][Stampa "falso]
Se non ti è chiara la sintassi delle condizioni vai alla pagina della primitiva Se. Il seguente esempio modifica il terzo
esempio per interrompe la ricorsione al 100-esimo numero.
Invoca il programma con ex3 0.
Come esercizio puoi modificare il programma per visualizzare numeri interi tra 55 e 350 che sono divisibili per
11.
Utilizzando la ricorsione è molto semplice generare in LOGO alcune semplici curve chiamate frattali in
matematica.
Questi sono i primi passi per creare la linea spezzata di Van Koch:
Come primo passo si disegna un segmento di una data lunghezza.
Come secondo passo:
A questo punto il segmento originario risulterà spezzato in quattro segmenti di lunghezza pari ad di quello
originario (terza figura). Il secondo passo viene quindi ripetuto su ciascuno dei quattro segmenti originando 16
segmenti di lunghezza pari ad dei precedenti, ossia ⋅ = (quarta figura). Ad ogni passo la lunghezza dei
segmenti si riduce di un fattore 3.
Importante Abbiamo scovato la natura ricorsiva dei frattali!
Vediamo come impostare concettualmente il programma LOGO. Chiamiamo Ln,ℓ il segmento di lunghezza ℓ,
corrispondente al passo n.
Per disegnare il segmento:
In LOGO, il programma è molto semplice:
Il programma si invoca come linea 50 3, dove il primo argomento è la lunghezza del segmento
originario ed il secondo argomento è il numero di ricorsioni da eseguire. Incredibile il potere della
ricorsione!
Se disegniamo un triangolo equilatero con tre linee di Van Koch otteniamo uno stupendo fiocco di neve di Van Koch.
Il programma si invoca per esempio con: fioccoNeve 200 6
Leggi pagina § per capire come impiegare le primitive Parola, Ultimo, e EccettoUltimo, EU.
Si invoca con Stampa invertiParola "Logo.
Un palindromo è una parola o una frase che si può leggere in entrambi i sensi (esempi: I treni inerti, Etna gigante …). Aggiungiamo una semplice verifica all’esempio precedente per capire se la parola o la frase è palindroma.
Anche i numeri possono essere palindromi, per esempio 4884. Infine, un programma per cercare numeri palindromi a partire da un qualsiasi numero (Grazie Olivier SC):
Si invoca con numeroPalindromo 78:
Il fattoriale di un numero n è il prodotto dei primi n numeri interi positivi. Per esempio il fattoriale di 5 è definito come:
Si invoca con Stampa fattoriale 5.
Possiamo approssimare il numero pi greco utilizzando la formula:
La formula contiene l’espressione ricorsiva 2 + , quindi ecco il programma:
Si invoca con approxpi 10.
Con 10 approssimazioni troviamo i primi 5 decimali! Se vuoi trovare più decimali devi aumentare la precisione aumentando il numero di decimali con la primitiva ImpostaDecimali.
E ora abbiamo 39 decimali esatti…