#!/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";
}