6.4. Subroutines

Example 6-4. examples/subroutines/fibonacci.p6

#!/usr/bin/perl6

die "Usage: $PROGRAM_NAME number" if not @*ARGS;

say "Computing Fibonacci of {@*ARGS[0]}";
say "Result: " ~ fib_recursive(@*ARGS[0]);
say "Result: " ~ fib_r(@*ARGS[0]);
say "All: " ~ join " ", fib(@*ARGS[0]);

sub fib_recursive ($n) {
    return 1 if $n == 1 or $n == 0;
    return fib_recursive($n-1)+fib_recursive($n-2);
}

sub fib ($n) {
    my @fibs;
    @fibs.push(1) if $n > 0;
    @fibs.push(1) if $n > 1;
    for 2..$n {
        @fibs.push(@fibs[-1]+@fibs[-2]);
    }
    return @fibs;
}

sub fib_r ($n) {
    return 1 if $n == (1|0);
    return fib_r($n-1)+fib_r($n-2);
}