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