PHP中的递归函数
我在PHP中的递归函数有问题。我的函数的目的是比较一个ip和一系列ip。以下是我对两个变量的数据模型:PHP中的递归函数,php,function,recursion,boolean,Php,Function,Recursion,Boolean,我在PHP中的递归函数有问题。我的函数的目的是比较一个ip和一系列ip。以下是我对两个变量的数据模型: Array ( [0] => 150 [1] => 2 [2] => 0 [3] => 155 ) Array ( [0] => Array ( [0] => 150 [1] => 26 [2] => 0 [3] =
Array
(
[0] => 150
[1] => 2
[2] => 0
[3] => 155
)
Array
(
[0] => Array
(
[0] => 150
[1] => 26
[2] => 0
[3] => 0
)
[1] => Array
(
[0] => 150
[1] => 100
[2] => 255
[3] => 255
)
)
我知道迭代方法可能会更好,但它只是用于使用递归方法进行训练。
这是我的代码:
function checkRangeIp($ip_array, $range_ip_array, $recur_it = 0) {
if ($recur_it == 4)
return false;
$nb1 = $ip_array[$recur_it];
$nb2 = $range_ip_array[0][$recur_it];
$nb3 = $range_ip_array[1][$recur_it];
if ($nb1 < $nb2 || $nb1 > $nb3)
return true;
else
checkRangeIp($ip_array, $range_ip_array, $recur_it + 1);
}
你有主意了吗?谢谢。您有一个退出路径
checkRangeIp
,它不返回任何值(即递归调用)。换成
return checkRangeIp($ip_array, $range_ip_array, $recur_it + 1);
否则,函数调用将在if(…)
条件中被评估为false
注意:看起来您不知怎么搞混了
true
和false
。如果值超出范围,则条件($nb1<$nb2 | |$nb1>$nb3)
为真,在这种情况下,函数返回true
,如果只是比较每个范围对,则它本身不适合递归。将其改为循环。如果$nb1<$nb2|124;$nb1>$nb3
,则函数只返回true
。对于第一个值,150
,情况并非如此。因此,它不再返回,而是再次调用checkRangeIp
,但您没有返回该调用的返回值,因此它将不返回任何内容。这就是说,即使这是固定的,我不认为你的范围检查是正确的,这真的不是一个递归解决方案的问题。
return checkRangeIp($ip_array, $range_ip_array, $recur_it + 1);