使用PHP中的递归查找数组中的最大值

时间:2016-10-08 02:20:15

标签: php arrays recursion

我知道如何使用循环来完成这个简单的问题,但我想用递归来玩更多。我试图使用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” 谁能帮我?

1 个答案:

答案 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));
    }
}