2011-04-30 130 views
0

我不知道为什么,但我创建了一个函数,并以某种方式它永远不会返回任何东西。 它应该返回使用mt_rand()函数生成的随机数。 我修改了代码,并试图在ideone运行它,结果说运行时错误信号11(SIGSEGV)函数总是返回null

谁能告诉我有什么错呢?

<?php 
    function breedingTree($name, $N, $max) 
    { 
     include('config.php'); 
     if ($N < $max AND $name > 0) 
     { 

      $sql = 'SELECT sire, dam 
        FROM '.$prefix.'owned_adoptables 
        WHERE aid = "'.$name.'"'; 
      $res = mysql_query($sql); 
      list($s, $d) = mysql_fetch_row($res); 
      if (mt_rand(0,1) === 1) breedingTree($s, $N+1, $max); 
      else breedingTree($d, $N+1, $max); 

     } 
     elseif ($name <= 0) 
     { 

      if ($N === 0) return mt_rand(1,100); 
      elseif ($N === 1) return mt_rand(5,95); 
      elseif ($N === 2) return mt_rand(15,85); 
      elseif ($N === 3) return mt_rand(25,75); 

     } 

    } 

echo breedingTree(355, 0, 4); // Return nothing 
echo breedingTree(0, 0, 4); // Return random number between 1 - 100 
?> 
+0

这需要进行基本的调试。如果没有返回,可能是因为'$ name'是'> 0'。 '$ name','$ N'和'$ max'包含什么? – 2011-04-30 14:20:35

+3

不要递归调用breedingTree()需要返回值吗?否则,价值将如何传播回来? – 2011-04-30 14:21:45

+0

您的代码可能存在问题的一些指针 - (1)如果递归函数与SQL查询在其中可能会非常糟糕的性能,如果你递归很多(2)包括在你的函数中的PHP文件将范围一切到你的函数和在你的函数中执行该php文件中的所有代码。 – 2011-04-30 14:23:35

回答

1

如果$N不为0,1,2,或3,或如果($N < $max AND $name > 0),或者如果($N >= max AND $name > 0)?这些代码路径没有return语句。

+0

$ N实际上永远不会达到4以上。因为$ max只会在0到4之间指定。而$ s和$ d($ name)最终会达到0.我尝试用echo()替换那些返回值。代码似乎工作得很好。它回显随机数,但返回()没有返回任何东西。 – 2011-04-30 14:26:21

+0

@凯马尔:好的。但是你应该让这些代码路径断言,或者抛出一个异常或其他东西来记录它们不会发生。但是,这仍然会导致'if($ N <$ max AND $ name> 0)'里面没有return语句...... – 2011-04-30 14:30:11

+0

好的谢谢。我把return语句放在第一个if语句中,现在它正在工作! – 2011-04-30 14:38:38