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 Q(11).
•  Scrivi un programma, nel linguaggio che preferisci, che stampi i valori da Q(3) a Q(20)  ed  uno che dando N in input fornisca come output Q(N).

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...