递归算法似乎正确,但不起作用

时间:2019-01-21 10:43:03

标签: php algorithm recursion

我正在尝试以递归方式在php中编写选择算法。 如图所示,这是正确的逻辑,但它不起作用。 这里是代码示例:

$array  = [4,5,22,0,-9];

function findmin($arr){

   if(sizeof($arr) > 0){
       $min_index = 0;
       for ($i = 1; $i < sizeof($arr); $i++){
           if($arr[$min_index] > $arr[$i]){
               $min_index = $i;
           }
       }

       unset($arr[$min_index]);
       findmin($arr);
   }   

}
findmin($array);

,输出为:

  

注意:未定义的偏移量:第20行的test.pnp.php中为0

     

注意:未定义的偏移量:第20行的test.pnp.php中为0

     

注意:未定义的偏移量:第20行的test.pnp.php中为0

     

注意:未定义的偏移量:第20行的test.pnp.php中为0

     

注意:未定义的偏移量:第20行的test.pnp.php中为0 ...

p.s。第20行是代码的一部分:if($arr[$min_index] > $arr[$i]){

2 个答案:

答案 0 :(得分:1)

有一种简单的方法可以递归地找到最小值:

function findMin($arr){
    $min = 0;
    foreach($arr as $item){
        if(is_array($item)){
            $val = findMin($item);
        }else{
            $val = $item;
        }
        $min  = $val<$min?$val:$min;
    }
    return $min;
}

您还可以使用min()函数

答案 1 :(得分:0)

取消设置数组中的元素时,键保持不变。让我们拥有键0、1、2-未设置键0,数组将具有键1、2-因此,对于下一个循环,请使用array_values($ arr)-这将为您的键重新编制索引。您也错过了return语句。固定代码如下

netstat
相关问题