我知道如何使用循环来解决这个简单的问题,但我想更多地使用递归。我试图使用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”有人能帮我吗?
发布于 2016-10-08 02:43:51
问题是因为你的基本状况,
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));
}
}https://stackoverflow.com/questions/39928049
复制相似问题