sub fact4{ #no recursion at all my $n = Math::BigInt->new(1); foreach my $i (map Math::BigInt->new($_), 1..shift) { $n = Math::BigInt->new($i->bmul($n)); } return $n; } #### sub fact5{ #no recursion at all my $n = Math::BigInt->new(1); foreach my $i (1..shift) { $n = Math::BigInt->new($n->bmul($i)); } return $n; } #### sub fact6{ #divide and conquer my $m = shift; my $n = @_ ? shift : $m; if ($m < $n) { my $k = int($m/2 + $n/2); return Math::BigInt->new(fact6($m, $k))->bmul(fact6($k+1,$n)); } else { return Math::BigInt->new($m); } }