« Ritorna al blog

Ritorna alla lista completa degli articoli

Calcolo serie di Fibonacci

PHP - settembre 04, 2021

La serie di Fibonacci detta anche sequenza di Fibonacci è una successione di numeri interi dove i primi due elementi sono 1 e 1, e il numero a seguire la somma dei due termini precedenti. Molte volte viene proposto ai programmatori perché aiuta a capire come funziona una struttura di controllo iterativa.

La successione che dobbiamo replicare è la seguente:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 [...]

Abbiamo visualizzato i numeri prima del 200. Per prima cosa dobbiamo scegliere la struttura di controllo più adatta al nostro caso. Come sappiamo in PHP ma anche in altri linguaggi di programmazione abbiamo diverse strutture di controllo iterative:

  • Ciclo For
  • Ciclo ForEach
  • Ciclo While
  • Ciclo Do While

Io ho optato per il ciclo While. La formula da cui partire è la seguente: 

Fn = Fn-1 + Fn-2

Applichiamo la formula. Immaginiamo di voler saper qual è il quarto numero della serie Fibonacci. La formula diventerà:

F4 = F3 + F2

Possiamo leggere la formula anche nel seguente modo:

Il quarto numero della serie di Fibonacci è 3, dato dalla somma di 2 + 1.

Sappiamo, dunque, che il prossimo numero ($next) sarà dato dalla somma del numero precedente ($previous) e di quello corrente ($current). In poche parole in PHP diventerebbe:

$next = $previous + $current;

Essendo una struttura ricorsiva dovremo ricordarci di mantenere in memoria lo stato precedente dell'operazione: 

$previous = $current;
$current = $next;

Lo script completo in PHP:

<?php

  $previous = 0;
  $current = 1;
  $next = 0;
  $limit = 200;
  $sequence = "";
  
  while($next < $limit){
    
    $sequence .= $current . ", ";

    $next = $previous + $current;
    $previous = $current;
    $current = $next;
  }

  $sequence = trim($sequence);
  $sequence = substr($sequence,0,strlen($sequence) - 1);

  echo $sequence;

  // Output
  // 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144

?>

La serie di Fibonacci è costruita sulla base della somma dei due numeri naturali precedenti. Al crescere di si arriva al rapporto aureo.

Date due lunghezze A e B, dove B è maggiore di A, si dicono in rapporto aureo se:

A/B = B/(A+B)

Ecco lo script completo in PHP per calcolare questo rapporto:

<?php

  $previous = 0;
  $current = 1;
  $next = 0;
  $limit = 200;
  $sequence = "";
  
  while($next < $limit){

    // Evito l'errore divisione per zero
    if($previous == 0)
        $previous = 1;

    $aureo = $current/$previous;
    $sequence .= $current . "/" . $previous . " = " . $aureo . "<br>"; 
    
    $next = $previous + $current;
    $previous = $current;
    $current = $next;

  }

  echo $sequence;

  // Output
  /*
        1/1 = 1
        2/1 = 2
        3/2 = 1.5
        5/3 = 1.6666666666667
        8/5 = 1.6
        13/8 = 1.625
        21/13 = 1.6153846153846
        34/21 = 1.6190476190476
        55/34 = 1.6176470588235
        89/55 = 1.6181818181818
        144/89 = 1.6179775280899
  */

?>

Il rapporto aureo è pari quindi a 1,618. Man mano che andiamo avanti nella sequenza il rapporto aureo è come se rispecchiasse la struttura geometrica degli oggetti che troviamo in natura. Ecco perché viene detta anche proporzione divina. Leonardo Da Vinci ne fece larghissimo uso nelle sue opere. Il rapporto aureo viene usato anche dai designer che progettano loghi oppure dagli architetti o dai progettisti di tutto il mondo che creano oggetti di largo consumo.