Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 递归算法似乎正确,但不起作用_Php_Algorithm_Recursion - Fatal编程技术网

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

Php 递归算法似乎正确,但不起作用,php,algorithm,recursion,Php,Algorithm,Recursion,我试图用php编写递归选择算法。 正如所见,这是正确的逻辑,但它不起作用。 下面是ar代码示例: $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]){

我试图用php编写递归选择算法。 正如所见,这是正确的逻辑,但它不起作用。 下面是ar代码示例:

$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);
$array=[4,5,22,0,-9];
函数findmin($arr){
如果(sizeof($arr)>0){
$min_指数=0;
对于($i=1;$i$arr[$i]){
$min_索引=$i;
}
}
未设置($arr[$min_index]);
findmin($arr);
}   
}
findmin($数组);
输出为:

注意:第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、 第20行是代码的一部分:
if($arr[$min_index]>$arr[$i]){

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

函数findMin($arr){
$min=0;
foreach($arr作为$item){
if(is_数组($item)){
$val=findMin($item);
}否则{
$val=$item;
}

$min=$val当您取消设置数组中的元素时,键保持不变。让键0、1、2-取消设置键0,数组将有键1、2-因此,对于下一个循环,使用array_值($arr)-这将重新为键编制索引。此外,您还丢失了return语句。修复了下面的代码

<?php

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

function findmin($arr){

   if(sizeof($arr) > 1){
       $min_index = 0;
       for ($i = 1; $i < sizeof($arr); $i++){
           if($arr[$min_index] > $arr[$i]){
               $min_index = $i;
           }
       }
       unset($arr[$min_index]);
       // Here is added return and fixed indexes of array
       return findmin(array_values($arr));
   } elseif (sizeof($arr) === 1) {
       return $arr[0];
   }

}
echo findmin($array);

当你在数组中取消设置元素时,键保持不变,重新索引你的数组你需要在取消设置值后检查数组,你还需要更新$min_索引,因为在循环之后,它总是尝试取消设置第0个索引,这不是一个找到最小返回值的方法吗?这应该做什么?你也可以使用
数组\u splice()
删除元素并重新索引。当然,但我想保留大部分原始代码。这段代码用于分层数组,他只是在使用平面数组。如果同时使用“for”和递归函数,您可以找到多维数组的最小值。对于一维(平面数组),您只需要一个“for”查找最小或递归函数