use strict; use Benchmark; use Inline 'C'; my $top = 150; timethese(500000, { recursive_perl => sub {factorial_recursive_perl($top)}, iterative_perl => sub {factorial_iterative_perl($top)}, recursive_c => sub {factorial_recursive_c( $top)}, iterative_c => sub {factorial_iterative_c( $top)}, }); sub factorial_recursive_perl { return 1 if $_[0] < 2; return $_[0] * factorial_recursive_perl($_[0] - 1); } sub factorial_iterative_perl { my $return = 1; $return *= $_ for 2..$_[0]; return $return; } __END__ __C__ double factorial_recursive_c(int x) { if (x < 2) return 1; return x * factorial_recursive_c(x - 1); } double factorial_iterative_c(int x) { int i; double result = 1; for (i = 2; i <= x; i++) result *= i; return result; }