2013-02-04 255 views
0

我有这个困难的任务(至少对我来说)。 这是一个抽象的问题,我会说数学。 假设我有2个输入:循环内循环

  1. 关键字(字符串)
  2. 一些(深度级)

,并提交按钮。

此关键字从数据库中返回8个与此字符串类似的其他关键字。 对于每一个8个关键字,我需要调用相同的函数,这将返回我已经返回的所有这8个字符串中的另外8个相似的关键字。 这里是“级别”号码。我需要深入每一个返回的字符串,取决于我输入的级别号码。

例如:如果关卡号码是2,那么我们将调用该功能9次。首次使用原始关键字,每次返回的关键字使用8次。 如果等级号码为3,那么该函数将被调用73次。就像在前面的例子中一样,但是我们已经返回了另外8个关键字。我认为循环内会有几个循环,但不能自己弄清楚。将感谢您的建议。

这里的,我已经写了大概非充分的主要代码:

$keywords = preg_split('/$\R?^/m', trim($_POST['keyword'])); 
$keywords = array_map('trim', $keywords); 
$level = $_POST['level']; 
if (!$level || $level < 2) { 
    echo '<b>Level was either 1 or null</b>'; 
} 
foreach ($keywords as $keyword) { 
    $results = getResults($keyword); 
    if ($level && $results) { 
     for ($i = 0; $i < sizeof($results); $i++) { 
      $results1 = getResults($results[$i]); 
      for ($j = 0; $j < $level; $j++) { 
       $results1 = getResults($results1[$i]) 
      } 
     } 
    } 
} 

输出应该是这样的:

1-> 
    2 
    -> 
     3 
     3 
     3 
     3 
     3 
     3 
     3 
     3 
    2-> 
    2-> 
    2-> 
    2-> 
+0

下面是我写的主要代码,可能是效率不高的: – Ronen

+3

不是3级给你1 + 8 + 64函数调用吗? – ickmund

+2

听起来像简单的递归给我。 – Almo

回答

9

你需要了解什么recursionmeans和如何能在你的代码中使用它。基本上你需要在自己内部调用相同的函数,n次,其中n是请求的深度级别。

从一些像斐波那契数列的小例子开始,你会找到实现你的函数的方法。

全部基于条件($deepness > 0)

根据我的理解,这里有一点小小的建议(伪代码)。

function findSimilar($words,$deepness) { 
    if($deepness == 0) { 
     return similarWordsOf($words); 
    } else { 
     return similarWordsOf(findSimilar($words,$deepness -1)); 
    } 
} 
+0

这是不是只给出了一个长长的过于相似的单词列表? –

+0

这只是一个草稿功能。你会给他一个完整的解决方案吗? – Napolux

0

正如其他人已经指出的,所述关键解决方案是使用一个递归函数,即该再次调用自身的每个的使用减小深度值的类似的词的功能。

我的PHP是一个有点生疏了,所以这里的一些伪代码(又名Python)的:

def printSimilar(word, deepness=1, indent=0): 
    print (" " * indent) + word 
    if deepness > 0: 
     for similar in similarWords(word): 
      printSimilar(similar, deepness - 1, indent + 1) 

假设similarWords回报的类似的话清单,这将导致所需的输出。