0

我有这样的功能:

function test($T0){
  $T01 = $T0-$T0/2;
  $T02 = $T0+$T0/2;
  if($T01<$T0){
    test($T01);
  } else if($T02<$T0){
    test($T02);
  } else {}
  $result = array($T01,$T02);
    return $result;
  }

  $T0 = 50;
  $result = test($T0);
  echo $result[0];

为什么这个函数不是递归的?

4

5 回答 5

2

要了解递归,您必须了解递归

您忘记在 ifs 中返回值。

正确的代码:

<?php
 function test($T0){
   $T01 = $T0-$T0/2;
   $T02 = $T0+$T0/2;
   if($T01 < $T0) return test($T01);
   else if($T02 < $T0) return test($T02);
   else return array($T01,$T02);
 }

 $T0 = 50;
 $result = test($T0);
 echo $result[0];
 ?>
于 2013-07-02T13:01:22.523 回答
1

你错过了return递归调用:

return test($T01);

return test($T02);

此外,您的else子句上似乎有奇怪的大括号放置。很可能应该是:

else {
    $result = array($T01,$T02);
    return $result;
}

最后,值得注意的是,这个函数(理论上)会导致你的代码无限递归,因为你只是一直将一个正数除以 2 直到它达到 0。理论上这永远不会发生。在实践中,您将递归到一些非常非常小的数字,在该数字与 0 的差异将低于浮点精度。在我的测试中,这个数字是4.9406564584125E-324(即大约 0.0....0494 与 ... 是 322 个零)。

于 2013-07-02T12:57:16.007 回答
0

您的代码只是递归的,但 t01 的值总是小于 t02,所以它进入了一个无限循环

于 2013-07-02T12:59:50.793 回答
0

您没有在函数调用结束时编写 return ,因此它进入了无限循环

于 2013-07-02T12:58:02.800 回答
0

当我调试代码时:

在您的第一个条件下,$T01每次都将变为零。然后它将达到第一个条件并再次调用以运行,并且您当时正在传递零值。所以 $T01 和 $T02 的值在第二次变为零,它将进入 else 状态。所以这个函数不会再递归了。

于 2013-07-02T12:58:55.653 回答