微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

嵌套递归函数抛出错误

如何解决嵌套递归函数抛出错误

我有一个嵌套的递归函数,它是 codewars 的一项任务。

持久性(39) === 3; // 因为 3 * 9 = 27,2 * 7 = 14,1 * 4 = 4 而 4 只有一位数的持久性(999) === 4; // 因为 9 * 9 * 9 = 729,7 * 2 * 9 = 126,1 * 2 * 6 = 12,最后1 * 2 = 2; 持久性(4) === 0; // 因为 4 已经是一位数了

抛出:

致命错误:无法重新声明 rec();

function persistence(int $num): int {
    $str = (string)$num;
    $nums = str_split($str);
    $count = count($nums);

    if( $count === 0 ){
        return 0;
    }
    $x = 0;

    function rec($nums,$n) {

        $result = [];
        for ($i = 0; $i < count($nums); ++$i) {
            if ($i == 0) {
                $result = $nums[$i];
            } else {
                $result *= $nums[$i];
            }
        }

        $num = implode('',$nums);
        $diff = $num - $result;
        if ( $diff != 0 ) {
            $n += 1;
            $result = str_split($result,1);
            return rec($result,$n);
        }
        return $n;
    }

    $result = rec($nums,$x);



    return (int)$result;

}

我尝试使用可变函数

$rec = 'rec'; 
$result = $rec($nums,$n)

但是还有一个错误:`

致命错误:无法重新声明 rec()

` PHP 7.4 版本。谁能解释一下是什么问题?

解决方法

不要在另一个函数内部定义函数:

你有:

function persistence(int $num): int {
    // code ...
    function rec($nums,$n) {
        // code ...
    }
}

这意味着每次调用函数 rec 时都应该创建函数 persistence

你应该先定义它们:

function persistence(int $num): int {
    // code ...
}
function rec($nums,$n) {
    // code ...
}

然后根据您的喜好调用它们,例如像您已经这样做的那样:

$rec = 'rec'; 
$result = $rec($nums,$n)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。