In R utilizzando il programma che opera sui numeri naturali usabile col
comando
Rivedi i commenti presenti nella soluzione dell'esercizio a cui venite collegati nel testo. Ecco come calcolare esattamente tutti i valori della successione di Fibonacci:
fib <- NULL; fib[1] <- "1"; fib[2] <- "1" for(i in 3:400) fib[i] <- som(fib[i-1],fib[i-2]) fib[10]; fib[50]; fib[100]; fib[200]; fib[300]; fib[400] # "55" "12586269025" "354224848179261915075" "280571172992510140037611932413038677189525" # "222232244629420445529739893461909967206666939096499764990979600" # "176023680645013966468226945392411250770384383304492191886725992896575345044216019675" app(fib[400]) # 1.760237e+83
Con recursion-C:
I valori che si ottengono con WolframAlpha sono gli stessi.
Calcoliamo il rapporto tra due termini successivi:
piu(app(fib[200])/app(fib[199])) # 1.61803398874989 piu(app(fib[201])/app(fib[200])) # 1.61803398874989 piu(app(fib[202])/app(fib[201])) # 1.61803398874989 piu(app(fib[400])/app(fib[399])) # 1.61803398874989
Con lo script e con la calcolatrice, per n = 70, 71, 72: 308061521170129 / 190392490709135 = 1.6180339887 498454011879264 / 308061521170129 = 1.6180339887
Si stabilizzano su un numero particolare. Vediamo con WolfrmaAlpha se esso è esprimibile
diversamente. Ottengo che questo numero viene chiamato golden ratio (rapporto aureo)
e che è pari a
G <- function(n) ((1+sqrt(5))/2)^n G(100)/app(fib[100]); G(200)/app(fib[200]); G(300)/app(fib[300]); G(400)/app(fib[400]) # 2.236068 2.236068 2.236068 2.236068 piu(G(400)/app(fib[400])) # 2.23606797749982
Quindi Fib(n) ≈ A·Bn con B = (1+√5)/2 e A ≈ 2.236067977.
Con WolfrmaAlpha se introduco 2.23606797749982 ottengo che 2.23606797749978969 è l'approssimazione
di √5. Quindi
# Verifica: H <- function(n) ((1+sqrt(5))/2)^n/sqrt(5) H(8);fib[8]; H(12);fib[12]; H(16);fib[16]; H(50);fib[50] # 21.00952 "21" 144.0014 "144" 987.0002 "987" 12586269025 "12586269025" # OK
Posso verificare la cosa con WolfrmaAlpha in vari modi. Ad esempio se introduco:
lim fibonacci[n]/(((sqrt(5)+1)/2)^n) as n -> inf
ottengo 1/√5