#!/usr/bin/perl use v5.14; use strict; use warnings; my $result = 0; my $level = 2; # next is F2 my $max_val = 4_000_000; my $max_rec = 1000; my $DBG = 1; fib(1,0); # F1,F0 print $result; sub fib { my @frame = @_; #my $DBG = 1; unshift @frame, $frame[0] + $frame[1]; # prepend next level Fib (see footnote 1) pop @frame; # remove tailing Fib (optional) count($frame[0]); say "Fib(" . $level++ . ") = $frame[0]" if $DBG; say " ... # \@frame = (@frame)" if $DBG; # playing safe with deep recursion die "May recursion $max_rec exceeded" if $level > $max_rec; return fib(@frame) unless($frame[0] >= $max_val); } sub count { my ($increment) = @_; #my $DBG = 1; if(($increment % 2) == 0){ say "adding Fib($level) = $increment to $result" if $DBG; $result += $increment; } }