Hi, habe ein problem mit einer mathematischen aufgabe, die ich rekursiv lösen möchte. Wenn ich den code ausführe antwortet perl nach einiger zeit mit 'out of memory'. wenn ich $UPPER auf 10_000 setze rechnet er noch ohne probleme. kann mir jemand sagen wo hier das problem liegt?
Dankeschön#!/usr/bin/perl/
#problem14.pl -- by b.w.
#Programm um folgendes Problem zu lösen:
#The following iterative sequence is defined for the set of positive integers:
#n n/2 (n is even)
#n 3n + 1 (n is odd)
#Using the rule above and starting with 13, we generate the following sequence:
#13 40 20 10 5 16 8 4 2 1
#It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is #thought that all starting numbers finish at 1.
#Which starting number, under one million, produces the longest chain?
#NOTE: Once the chain starts the terms are allowed to go above one million.
$UPPER = 100_000;
my @sieve;
my $h=1;
foreach my $i(1.. $UPPER-1) {
$h=$i if(comp($i)>$h);
}
print "$h\n";
sub comp {
my ($n)=@_;
my $ret;
if(@sieve[$n]=~/^$/) {
if ($n==1) {$ret= 1;}
else {
if($n% 2==0) {$ret= comp($n/2)+1;}
else {$ret= comp(($n*3)+1)+1;}
}
@sieve[$n]=$ret;
}
else {$ret=@sieve[$n];}
return $ret;
}
Datum: 22.11.2008-15:50
