我知道如何使用循环来解决这个简单的问题,但是我想在递归中发挥更多的作用。我试图在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”有人可以帮助我吗?
问题是因为您的基本情况在这里,
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));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句