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->
4

2 回答 2

9

您需要了解在代码中使用它的recursion 含义以及如何使用它。基本上,您需要在其内部调用相同的函数,n 次,其中 n 是您的请求的深度级别。

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

一切都基于一个条件($deepness > 0)

根据我的理解,这是一个小建议(伪代码)。

function findSimilar($words,$deepness) {
    if($deepness == 0) {
        return similarWordsOf($words);
    } else {
        return similarWordsOf(findSimilar($words,$deepness -1));
    }
}
于 2013-02-04T15:02:37.420 回答
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返回相似词的列表,这应该会产生所需的输出。

于 2013-02-04T17:17:20.730 回答