lunedì 9 gennaio 2012

Fibonacci

Siete curiosi di sapere la sequenza di Fibonacci fino al 10000 elemento?

Ho scritto un semplice programma che calcola e trova i primi 10000 numeri della sequenza di Fibonacci. La sequenza di Fibonacci è una successione di numeri tali che:
- Il primo elemento è 0
- Il secondo è 1
- I successivi sono la somma dei due che li precedono
La sequenza inizia quindi così: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34...
Questa sequenza apparentemente banale ed inutile nascone alcune importati proprietà nascoste. Una delle quali è lo stretto legame con il numero d'oro (sezione aurea: 1.6180339...). Spiegarle tutte sarebbe un lavoro eterno ed inutile dato che sono dettagliatamente trattate su Wikipedia a questo indirizzo. Una delle proprietà più interessanti è quella che riguarda la sezione aurea. In questa successione il rapporto tra due elementi consecutivi della successione si avvicina sempre di più a questa costante.

Ovviamente un semplice intero o anche un long non può contenere dei numeri così grandi (stiamo parlando di oltre duemila cifre all'elemento 10000). Per risolvere questo problema mi sono affidato ad un tipo di intero diverso: il BigInteger (presente in System.Numerics)
Questo tipo di numero non ho un limite per la sua grandezza, l'unico limite è la memoria di sistema!
Bene ora è tutto più semplice, basta iterare la funzione che calcola il numero sommando i due precedenti ed il gioco è fatto!

Non credo sia necessario commentare il codice vista la sua semplicità (anche se devo ammettere che l'ho scritto parecchio male....). Nel codice è presente un solo commento. Se togliete il commento animerete la ListBox che focalizzerà sempre l'ultimo numero della sequenza senza bloccarsi. Quando finisce di calcolare la sequenza il programma vi mostrerà un messaggio che vi dice quanto tempo ci ha messo (molto preciso...) e quante cifre ha l'ultimo termine della sequenza.
A chi interessasse questo software può essere usato come benchmark ritoccando ed ottimizzando il codice. Per il calcolo del tempo impiegato ho usato una classe che è precisa al decimo di microsecondo... Forse un po' troppo...
Il mio computer ha un Intel Core i5 2500K da 3.3GHz e per eseguire questo calcolo impiega 22.5669408 secondi.

DOWNLOAD
Dropbox - Google Drive

SCREEN:

Nessun commento:

Posta un commento