#!/usr/bin/perl use warnings; use strict; sub fibonaccil { my ($count, $aref) = @_; unless ($aref) { # first call - initialize $aref = [1,1]; $count -= scalar(@{$aref}); } if ($count--) { my $next = $aref->[-1] + $aref->[-2]; push @{$aref}, $next; return fibonaccil($count, $aref); } else { return wantarray?@{$aref}: $aref->[-1]; } } print scalar(fibonaccil(10)), "\n"; print scalar(fibonaccil(10, [2, 4])), "\n"; my @sequence = fibonaccil(10); print "Sequence: @sequence \n"; sub fibonacci2 { my ($count, $internal) = @_; if ($count <= 2) { return $internal ? [1,1] : 1; } else { my $result = fibonacci2($count -1, 'internal'); my $next = $result->[-1] + $result->[-2]; if ($internal) { push @{$result}, $next; return $result; } else { return $next; } } } foreach (1..20) { print "Element $_ is ", fibonacci2($_), "\n"; }