在递归函数PHP中返回值的问题

时间:2014-12-06 00:58:58

标签: php recursion 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 ) {
        $this->calculate($rslt,++$count);
    } elseif ( strlen((string)$rslt) == 1 ) {
        return $count;  
    }
}

1 个答案:

答案 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,因为在使用递归时,它的错误样式会发生变异。