program Fibonacci; // Finds the fibonacci series for 12. // Author: Jon Fast // Last Modified: 10/31/2013 // compiler mode: Object Pascal used {$mode objfpc}{$H+} //libraries uses SysUtils; // write the depth of the recursive call to a string // more tabs indicate greater call depth procedure writeDepth(depth: longint; var filevar: textfile); var i: longint; begin for i := 0 to depth do Write(filevar, '- '); end; // calculate the current fibonacci number function calculate(number: longint; depth: longint; var filevar: textfile): longint; var fib1: longint; fib2: longint; begin // check for stopping conditions if number = 0 then begin writedepth(depth, filevar); writeln(filevar, 'Reached 0!'); Result := number; end else if number = 1 then begin writedepth(depth, filevar); writeln(filevar, 'Reached 1!'); Result := number; end // recurse else begin // calculate fib 1 writedepth(depth, filevar); writeln(filevar, 'Calculating #1: f( ', number - 1, ' )'); fib1 := calculate(number - 1, depth + 1, filevar); // calculate fib 2 writedepth(depth, filevar); writeln(filevar, 'Calculating #2: f( ', number - 2, ' )'); fib2 := calculate(number - 2, depth + 1, filevar); // result is addition of both writedepth(depth, filevar); writeln(filevar, 'Result is: ', fib1 + fib2); Result := fib1 + fib2; end; end; // fibonacci starter code procedure fibonacci(number: longint); var depth: longint; filevar: textfile; finalfib: integer; begin // starting depth is 0 depth := 0; // if number is greater than 0, its fib can be found if number > 0 then begin try // initialize the file assignfile(filevar, 'fibonacci_trace.txt'); rewrite(filevar); // what are we looking for? writeln(filevar, 'Fibonacci series of ', number, '...'); writeln; // find it finalfib := calculate(number, depth, filevar); writeln('Fibonacci number ', number, ' is ', finalfib, '.'); // no more closefile(filevar); except on e: EInOutError do begin // file not created writeln('File handling error occured.', e.message); end; end; end else // negative value error writeln('Error: Fibonacci number is not greater than 0.'); end; // main program begin // test: fibonacci 12 fibonacci(12); // done writeln('Done: Press any key to continue...'); readln; end.