sub A { my ($x, $y) = @_; my @stack = (); while (1) { if (0 == $x) { if (@stack) { $y++; $x = pop(@stack); } else { return 1 + $y; } } else { if (0 == $y) { $x--; $y = 1; } else { push @stack, $x-1; $y--; } } } }