#! perl -slw use strict; sub fib { my $n = shift; return 1 if $n == 1; return 1 if $n == 2; return fib( $n - 1 ) + fib( $n - 2 ); } my $indent = -1; sub fibx { ++$indent; my $n = shift; my $ret; if( $n == 1 ) { printf "%sfib( %d ) -> 1\n", ' .' x $indent, $n; $ret = 1; } elsif( $n == 2 ) { printf "%sfib( %d ) -> 1\n", ' .' x $indent, $n; $ret = 1; } else { printf "%sfib( %d ) ->fib( %d ) + fib( %d )\n", ' .' x $indent, $n, $n-1, $n-2; $ret = fibx( $n - 1 ) + fibx( $n - 2 ); } --$indent; return $ret; } print fib( $ARGV[ 0 ] ); print fibx( $ARGV[ 0 ] );