{ File: fibodeb.pas } { Scopo: funzione ricorsiva con ricorsione multipla; versione adatta ad essere eseguita in modalita` di debugging } program CalcoloFibonacci; { Dato un numero intero n calcola l'n-esimo numero di Fibonacci usando una funzione ricorsiva. L'i-esimo numero di Fibonacci F(i) e` definito attraverso la seguente definizione induttiva: F(i) = 0 se i = 0 F(i) = 1 se i = 1 F(i) = F(i-1) + F(i-2) se i >= 2 } { Utilizza il tipo predefinito del TurboPascal longint, che permette di rappresentare interi nell'intervallo da -2^31 a 2^31-1. } var numero : longint; function Fibonacci (n: longint): longint; { Calcola l'n-esimo numero di Fibonacci usando un metodo ricorsivo. Versione modificata e non ottimale che usa due variabili ausiliarie per visualizzare il risultato restituito dalla chiamata ricorsiva attraverso un debugger. } var f1, f2 : longint; begin { Fibonacci } if n = 0 then Fibonacci := 0 else if n = 1 then Fibonacci := 1 else begin f1 := Fibonacci(n - 1); f2 := Fibonacci(n - 2); Fibonacci := f1 + f2 end end; { Fibonacci } begin { CalcoloFibonacci } numero := 0; repeat write('Immetti un numero intero nonnegativo (o negativo per terminare)! '); readln(numero); if numero >= 0 then writeln('Il ', numero, '-simo numero di Fibonacci e'': ', Fibonacci(numero)); until numero < 0 end. { CalcoloFibonacci }