我知道如何使用循环来完成这个简单的问题,但我想用递归来玩更多。我试图使用PHP的递归在数组中找到最大值。我的基本想法是将数组的第一个值与新数组的最大值进行比较(通过删除给定数组的第一个值来实现):
function find_max($arr)
{
if ($arr = [])
{
return 0; // base case
} else
{
if ($arr[0] > find_max(rest_of($arr)))
{
return $arr[0];
} else
{
return find_max(rest_of($arr));
}
}
}
function rest_of($arr)
{
unset($arr[0]); // remove the first value of the array
$arr = array_values($arr); // re-index the array
return $arr;
}
但是当我跑步时,似乎它有无限循环。 “未定义的偏移量:0” 谁能帮我?
答案 0 :(得分:1)
问题在于你的基本情况,
if($arr = []){ ...
=
是赋值运算符,而不是比较运算符。您需要的是比较运算符==
。所以它应该是,
if($arr == []){
此外,您可以像这样更改基本条件,
if(count($arr) == 1){
return $arr[0]; // base case
}
所以你的find_max()
函数应该是这样的:
function find_max($arr){
if(count($arr) == 1){
return $arr[0]; // base case
}
if ($arr[0] > find_max(rest_of($arr))){
return $arr[0];
} else{
return find_max(rest_of($arr));
}
}