为了练习编写递归函数,我制作了一个简单的素数计算器。该函数起作用-它确定并以升序正确显示最大600,000的任何整数的质数-但它总是返回 NULL。
我知道函数的结构可能不同,等等。-这是我想了解的NULL返回的“原因”!
在下面的代码中,参数如下:
$original - the original value to be tested
$input - the value to be tested in the current iteration
$primes - array of primes
$divisors - array of prime factors determined
function determinePrimeFactors($original,$input,$primes,$divisors=[]) {
if ( $input !== 1 ) {
foreach ( $primes as $prime ) {
$quotient = $input / $prime;
if ( is_int($quotient) ) {
$quotients[] = $quotient;
}
}
$quotient = max($quotients);
$divisors[] = $input / $quotient;
determinePrimeFactors($original,$quotient,$primes,$divisors);
} else {
echo "<h1>RESULT</h1>";
echo "<p>".implode(" * ",$divisors)." = ".$original."</p>";
return $divisors;
}
}
回声输出总是正确的(例如3 * 31 * 823 = 76539
)。
我希望该函数返回作为回显输出基础的数组(例如[ 0=>3, 1=>31, 2=>823 ]
),但不返回任何内容。
这是为什么?
答案 0 :(得分:4)
在先前的调用中添加return
,以将返回值一直保留到第一次调用,并最终从函数中返回。
return determinePrimeFactors($original,$quotient,$primes,$divisors);
此外,借助以上return
,您可以通过删除多余的else
部分来使代码更简洁。
function determinePrimeFactors($original,$input,$primes,$divisors=[]) {
if ( $input !== 1 ) {
foreach ( $primes as $prime ) {
$quotient = $input / $prime;
if ( is_int($quotient) ) {
$quotients[] = $quotient;
}
}
$quotient = max($quotients);
$divisors[] = $input / $quotient;
return determinePrimeFactors($original,$quotient,$primes,$divisors);
}
echo "<h1>RESULT</h1>";
echo "<p>".implode(" * ",$divisors)." = ".$original."</p>";
return $divisors;
}