如何解决嵌套递归函数抛出错误
我有一个嵌套的递归函数,它是 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 举报,一经查实,本站将立刻删除。