Perl recursion causing "use of uninitialized value" error -
i new perl, , can't seem find answers anywhere. narrowed down problem recursive function. if comment out, works fine without errors. have:
use strict; use warnings; sub generatepermutations{ my($n, $nmax, $i, $arrlength, @arr) = @_; if($n == 0){ foreach($i..$arrlength-1){ $arr[$i] = 0; ++$i; } @qarr = (); $rval = 1; for(my $p = 0; $p < @arr; $p++){ $rval *= fac($arr[$p]); for(my $q = 0; $q < $arrlength; $q++){ $qcount = 0; for(my $j = 0; $j < $arrlength; $j++){ if($arr[$j] eq $q){ ++$qcount; } } $qarr[$i] = $qcount; } } $qval = 1; for(my $qnum = 0; $qnum < @qarr; $qnum++){ $qval *= fac($qarr[$qnum]); } $maxdistval = 0; $maxdistval = (1/($arrlength**$arrlength))*(fac($arrlength)/$rval)*(fac($arrlength)/$qval); if($maxdistval > $distribution){ $distribution = $maxdistval; } #prints out distributions permutations (comment out previous if-statement) print "dist: " . $distribution . "<br /><br />"; #return 1; } $resultcnt = 0; for(my $cnt = minval($nmax, $n); $cnt > 0; $cnt--){ $arr[$i] = $cnt; ++$resultcnt; generatepermutations(int($n-$cnt), $cnt, $i+1, $arrlength, @arr); } #return $resultcnt; return $distribution; }
what missing?
if had guess problem: $qarr[$i] = $qcount;
because you're writing 1 element in @qarr repeatedly, , later on reading elements 0 through $#qarr.
did mean $qarr[$p] = $qcount;
? or $qarr[$q] = $qcount;
?
Comments
Post a Comment