#!/usr/bin/perl
use warnings;
use strict;

sub fibonacci3 {
    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;
        @_ = ($count, $aref);
        goto &fibonacci3;
    } else {
        return wantarray?@{$aref}:$aref->[-1];
    }
}

print scalar(fibonacci3(1000)), "\n";