#!/usr/bin/perl use strict; use warnings; print "iterFac_for:\t", iterFac_for(6), "\n"; print "recFac:\t\t", recFac(6), "\n"; print "iterFac:\t", iterFac(6), "\n"; exit; sub iterFac_for { # straight iterativ (perl-style) my ($max, $val) = (shift, 1); $val *= $_ for (1..$max); return $val; } sub recFac { # linear recursive my $n = shift; return 1 if $n == 1; $n *= recFac($n-1); } sub iterFac { # linear iterativ but recursive defined?! my $max = shift; my $val = shift || 1; my $cnt = shift || 1; return $val if $cnt > $max; iterFac( $max, $val*$cnt, ++$cnt ); }