diff options
Diffstat (limited to 'perl/p2.pl')
-rwxr-xr-x | perl/p2.pl | 34 |
1 files changed, 17 insertions, 17 deletions
@@ -5,26 +5,26 @@ use warnings; # Functional (naïve) sub iter1 { - my ($fibs, $acc) = @_; - my ($a, $b) = @$fibs; - if ($a > 4_000_000) { - return $acc; - } else { - iter1([$b, $a+$b], $a & 1 ? $acc : $acc + $a); - } + my ($fibs, $acc) = @_; + my ($a, $b) = @$fibs; + if ($a > 4_000_000) { + return $acc; + } else { + iter1([$b, $a+$b], $a & 1 ? $acc : $acc + $a); + } } print iter1([1, 2], 0), "\n"; # Functional (tail recursive) sub iter2 { - my ($fibs, $acc) = @_; - my ($a, $b) = @$fibs; - if ($a > 4_000_000) { - return $acc; - } else { - @_ = ([$b, $a+$b], $a & 1 ? $acc : $acc + $a); - goto &iter2; - } + my ($fibs, $acc) = @_; + my ($a, $b) = @$fibs; + if ($a > 4_000_000) { + return $acc; + } else { + @_ = ([$b, $a+$b], $a & 1 ? $acc : $acc + $a); + goto &iter2; + } } print iter2([1, 2], 0), "\n"; @@ -32,8 +32,8 @@ print iter2([1, 2], 0), "\n"; my ($a, $b) = (1, 2); my $resp = 0; do { - $resp += $a unless ($a & 1); - ($a, $b) = ($b, $a+$b); + $resp += $a unless ($a & 1); + ($a, $b) = ($b, $a+$b); } while ($a <= 4_000_000); print "$resp\n" |