At My Fingertips

Fibonacci

In questa attività implementeremo la funzione spirale_fibonacci per generare una spirale che rappresenti i primi n numeri della successione di Fibonacci (una successione di numeri interi in cui ciascun numero è la somma dei due precedenti), come nella grafica seguente.

fibonacci

Le tessere

La spirale di Fibonacci è cmposta di tessere quadrate con un settore circolare che va da un angolo all'altro, ruotato e di dimensioni crescenti.

Per prima cosa dovremo implementare la funzione tessera, che ritorna un quadrato del colore e delle dimensioni scelte, con settore circolare nero di 90 gradi (il cui raggio è uguale al lato del quadrato), e un settore circolare più piccolo dello stesso colore del quadrato per coprire una parte di settore circolare nero, creando l'iilusione di una linea nera. La differenza tra il settore circolare nero e il settore circolare che lo ricopre dovrebbe corrispondere a un determinato spessore_linea.

Per raggiungere l'effetto desiderato dovrai usare le funzioni fissa e componi per fissare tutto nell'angolo in basso a sinistra.

Loading...

Orientare le tessere

Ogni tessera dovrebbe essere ruotata di 90 gradi rispetto alla precedente. Questo significa che la prima tessera dovrebbe restare uguale, la seconda dovrebbe essere ruotata di 90 gradi, la terza dovrebbe essere ruotata di 180 gradi e la quarta di 270 gradi. La quinta, poi, dovrebbe nuovamente restare uguale: il giro ricomincia.

Implementiamo una funzione orienta che riceve a parametro una tessera e la restituisce ruotata in base al parametro n. Se n == 0, allora la tessera non dovrebbe essere ruotata, se n == 1 dovrebbe essere ruotata di 90 gradi e così via.

Usa la funzione modulo %.

Loading...
Loading...

La Spirale

Ora siamo pronti per implementare la funzione spirale_fibonacci. Questa funzione prende il numero di tessere della tua spirale finale come parametro n. La spirale diventa molto grande molto rapidamente, quindi sentiti libero di adattare la costante DIMENSIONI_MIN fornita quando utilizzi un valore di n più grande.

La costante DIMENSIONI_MIN determina le dimensioni delle due tessere più piccole (le prime due tessere dovrebbero avere le stesse dimensioni, dato che la successione di Fibonacci comincia con 1, 1, 2, 3, 5, ...).
The MIN_SIZE is the size that the smallest two tiles should have (the first two tiles should have the same size, since fibonacci's sequence goes 1, 1, 2, 3, 5, ...).

A seconda di come hai implementato la funzione orienta, le prime due tessere dovrebbero essere piazzate una sopra l'altra o una accanto all'altra, in modo che le linee nere risultino allineate.

Successivamente, la terza tessera dovrebbe essere larga o alta tanto quanto le prime due tessere insieme (in modo che le linee nere risultino allineate). Puoi usare a tale scopo le funzioni di PyTamaro larghezza_grafica e altezza_grafica.

Anche la costante SPESSORE dovrebbe essere adattata in base a n, dato che il risultato finale può diventare molto grande.

Ci sono diversi modi per ottenere il risultato desiderato, ma noi noi ti guideremo attraverso l'implementazione della funzione spirale_fibonacci come una funzione ricorsiva.

Una funzione ricorsiva in Python è una funzione che si chiama da sola durante la sua esecuzione. Questo significa che all’interno della funzione c’è un punto in cui la funzione stessa viene richiamata, in modo da risolvere un problema suddividendolo in versioni più piccole e più semplici dello stesso problema.

L’idea principale è che un problema grande può essere spezzato in problemi più piccoli, fino a quando si arriva a un caso così semplice che si può risolvere direttamente.

I due elementi fondamentali di una funzione ricorsiva sono il caso base e il passo ricorsivo.

  • Il caso base in una funzione ricorsiva rappresenta la situazione più semplice del problema, quella che può essere risolta senza bisogno di ulteriore suddivisione. Questa è la condizione che interrompe la ricorsione, il punto in cui la funzione smette di chiamare se stessa e restituisce una risposta diretta, perché il problema è stato ridotto abbastanza da poter essere risolto facilmente.

In altre parole, il caso base è la condizione che evita che la funzione ricorsiva continui a richiamarsi all’infinito. Ogni funzione ricorsiva deve avere almeno un caso base, altrimenti non si fermerebbe mai.

  • Il passo ricorsivo è quella parte della funzione che prende l’input originale, lo trasforma in una versione più semplice, e poi richiama la stessa funzione con questo input semplificato. In questo modo, la funzione continuerà a lavorare su versioni sempre più semplici del problema, fino a raggiungere il caso base, che interrompe la ricorsione.

Nella nostra funzione:

  • il caso base dovrebbe restituire la prima tessera
  • il passo ricorsivo dovrebbe generare una nuova tessera orientata secondo il parametro n e combinarla con il risultato di una chiamata della funzione spirale_fibonacci stessa in cui al parametro n sarà attribuito valore n - 1

In questo modo, il caso base spirale_fibonacci(n=0) concluderà l'esecuzione per primo, poi spirale_fibonacci(n=1) genererà una nuova tessera e la combinerà con la prima, poi spirale_fibonacci(n=2) genererà una nuova tessera e la combinerà con il risultato di spirale_fibonacci(n=1). Il tutto continuerà fino a quando spirale_fibonacci(n=n) restituirà il risultato finale.

Loading...

This activity has been created by Lardelli and is licensed under CC BY-SA 4.0.

It is derived from this activity.

Fibonacci

Logo of PyTamaro

PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI

Privacy PolicyPlatform Version b744b47 (Tue, 08 Oct 2024 16:30:14 GMT)