0

私にはこの難しい仕事があります(少なくとも私にとっては)。これは抽象的な質問で、数学的だと思います。2 つの入力があるとします。

  1. キーワード (文字列)
  2. 数値(深さレベル)

そして送信ボタン。

このキーワードは、データベースからこの文字列に類似する 8 つの他のキーワードを返します。そして、その 8 つのキーワードのそれぞれについて、同じ関数を呼び出す必要があります。この関数は、既に返した 8 つの文字列すべての別の 8 つの同様のキーワードを返します。ここに「レベル」番号が表示されます。入力したレベル番号に応じて、返されたすべての文字列をさらに深く掘り下げる必要があります。

例: レベル番号が 2 の場合、関数を 9 回呼び出します。元のキーワードの場合は 1 回目、返された各キーワードの場合は 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 に答える