rendered paste bodymy $n=15;
my %memo;
my $total_calls = 0;
my @l = p($n,$n);
foreach my $t (@l) {
print "@$t\n";
}
print scalar(@l)," partitions.\n";
print "total calls = $total_calls\n";
sub p($$) {
my ($n,$k) = @_;
my $m = $memo{"$n,$k"};
if (defined $m) {
return @$m;
} else {
my @l = recursive_p($n,$k);
$memo{"$n,$k"} = \@l;
return @l;
}
}
sub recursive_p($$) {
my ($n,$k) = @_;
$total_calls++;
return () if ($n<0);
return ([]) if ($n==0);
return () if ($k==0);
return (p($n,$k-1),f($k,p($n-$k,$k)));
}
sub f($@) {
my $k=shift;
return map { [@$_,$k] } @_;
}