#!/usr/bin/perl

# fibonacci_iteratywnie($n) oblicza $n-ty wyraz ciagu Fibonacciego
# poprzez obliczenie wszystkich $n-1 wyrazow.
#
sub fibonacci_iteratywnie {
    my ($n) = shift;
    my ($i) = 2;
    my ($aktualny, $stary, $starszy) = (1,1);
    return 1 if $n <= 2;
    for ( ; $i < $n; $i++) {
        $starszy = $stary;
        $stary   = $aktualny;
        $aktualny = $stary + $starszy;
    }
    return $aktualny;
}

# fibonacci($n) oblicza bezposrednio $n-ty wyraz ciagu Fibonacciego.
#
sub fibonacci {
    my ($n, $s) = (shift, sqrt(5));
    return (((0.5 + 0.5*$s) ** $n) - ((0.5 - 0.5*$s) ** $n)) / $s;
}

print fibonacci_iteratywnie(20), "\n";

print fibonacci(20), "\n";
