PHP中的递归函数

时间:2011-12-29 11:33:16

标签: 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] => 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);
}

我不知道为什么,但是当我测试我的功能时,它总是给我一个错误的回报。

if (checkRangeIp($ip_array, $range_ip_array))
  echo "TRUE\n";
else
  echo "FALSE\n";

你有个主意吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您的退出路径为checkRangeIp,不会返回任何值(即递归调用)。替换为

return checkRangeIp($ip_array, $range_ip_array, $recur_it + 1);

否则函数调用将在false条件内评估为if(...)

注意:看起来你混淆了truefalse。如果值位于范围之外,则条件($nb1 < $nb2 || $nb1 > $nb3)为true,在这种情况下,函数返回true