Q(1) = 1, Q(2) = 1, Q(N+2) = Q(N)+Q(N+1) descrive la successione Q(1), Q(2), Q(3), Q(4), Q(5), Q(6), ...
i cui valori sono 1, 1, 2, 3, 5, 8, ... È nota come successione di Fibonacci. È stata presentata nel "Liber abaci" da Leonardo Pisano (vissuto a cavallo del 1200 e noto
come Fibonacci) come modello matematico del seguente "problema dei conigli":
«quante coppie di conigli verranno
prodotte in N mesi a partire da un'unica coppia se ogni mese ogni coppia
dà alla luce una nuova coppia che diventa produttiva a partire dal
secondo mese di vita?».
Q(N) rappresenta la
quantità di coppie presenti dopo N mesi.
•
Completa l'elenco dei termini
della successione fino a
•
Scrivi un programma, nel linguaggio che preferisci, che stampi i valori da
I termini della successione posso essere generati con un programmino in JavaScript (vedi), ma si poteva usare un qualunque linguaggio. Ecco i primi 50:
q1=1; q2=1; document.write(q1+" "+q2+" "); n=50
for(i=0; i<n-2; i=i+1) {s=q1+q2; q1=q2; q2=s; document.write(q2+" ")}
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903 2971215073 4807526976 7778742049 12586269025
Una versione che esplicita il procedimento:
a=1; b=1; c=a+b; n=3
document.write("Q(3) = "+a+"+"+b+" = "+c+"<br>")
for(i=4;i<=20;i=i+1)
{ a=b; b=c; c=a+b; n=n+1
document.write("Q("+n+") = "+a+"+"+b+" = "+c+"<br>") }
Q(3) = 1+1 = 2
Q(4) = 1+2 = 3
Q(5) = 2+3 = 5
Q(6) = 3+5 = 8
Q(7) = 5+8 = 13
Q(8) = 8+13 = 21
Q(9) = 13+21 = 34
Q(10) = 21+34 = 55
Q(11) = 34+55 = 89
Q(12) = 55+89 = 144
Q(13) = 89+144 = 233
Q(14) = 144+233 = 377
Q(15) = 233+377 = 610
Q(16) = 377+610 = 987
Q(17) = 610+987 = 1597
Q(18) = 987+1597 = 2584
Q(19) = 1597+2584 = 4181
Q(20) = 2584+4181 = 6765
Ecco il programma che dato in input N calcola e stampa Q(N), qui esemplificato per N=80:
N=80
q1=1; q2=1; n=80
for(i=0; i<n-2; i=i+1) {s=q1+q2; q1=q2; q2=s}; document.write(q2)
23416728348467684 (≈ 2.3*10^16)
Facciamo un altro esperimento. Stampiamo il rapporto tra Q(N) e Q(N-1). Facciamolo per diversi valori di N:
q1=1; q2=1; n=10; for(i=0; i<:n-2; i=i+1) {s=q1+q2;q1=q2;q2=s}; document.write(n+" "+q2/q1+"<:br>:")
q1=1; q2=1; n=20; for(i=0; i<:n-2; i=i+1) {s=q1+q2;q1=q2;q2=s}; document.write(n+" "+q2/q1+"<:br>:")
q1=1; q2=1; n=40; for(i=0; i<:n-2; i=i+1) {s=q1+q2;q1=q2;q2=s}; document.write(n+" "+q2/q1+"<:br>:")
q1=1; q2=1; n=80; for(i=0; i<:n-2; i=i+1) {s=q1+q2;q1=q2;q2=s}; document.write(n+" "+q2/q1+"<:br>:")
10 1.6176470588235294
20 1.6180339631667064
40 1.6180339887498947
80 1.618033988749895
Le uscite si stabilizzano su 1.618033988749895. Proviamo a vedere se esso ha qualche particolarità. Ricorriamo a WolframAlpha. Ottengo:

Se introduco phi ottengo "is the golden ratio" = (1+√5)/2. In italiano viene chiamato "rapporto aureo" Se calcolo (1+√5)/2 ottengo proprio 1.618033988749894848204...