use List::Util qw/sum/; my @a; # holds the known distribution sub conv { my ($n) = @_; return sum map { ($_ < @a) ? ((($n - $_) < @a) ? $a[$_] * $a[$n - $_] : 0) : 0 } 0 .. $n; }