递归算法看起来是正确的,但不起作用



我正在尝试将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);

输出为:

注意:未定义的偏移量:在第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]){

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

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()功能

在数组中取消设置元素时,键保持不变。让我们有键0,1,2-取消设置键0,数组将有键1,2,所以,对于下一个循环,使用array_values($arr)-这将重新索引键。此外,您还错过了退货声明。以下的固定代码

<?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);

相关内容

最新更新