在递归函数中返回值时遇到一些问题。但我可以回应它。 这可能有什么问题?
function calculate($i,$count=1)
{
$str_i = (string)$i;
$rslt = 1;
for ($k=0; $k<strlen($str_i); $k++) {
$rslt = $str_i[$k]*$rslt;
}
if ( strlen((string)$rslt) > 1 ) {
$this->calculate($rslt,++$count);
} elseif ( strlen((string)$rslt) == 1 ) {
return $count;
}
}
答案 0 :(得分:1)
在代码中的if
中,不使用递归调用中返回的值。您没有将其设置为值或return
。因此,除基本情况之外的每个调用都不会返回值。
试试这个:
function calculate($i,$count=1)
{
$str_i = (string)$i;
$rslt = 1;
for ($k=0; $k<strlen($str_i); $k++) {
$rslt = $str_i[$k]*$rslt;
}
if ( strlen((string)$rslt) > 1 ) {
return $this->calculate($rslt,$count+1); // I changed this line
} elseif ( strlen((string)$rslt) == 1 ) {
return $count;
}
}
现在我们返回递归调用返回的值。请注意,我将++$count
更改为$count+1
,因为在使用递归时,它的错误样式会发生变异。