2013-02-04 253 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回報的類似的話清單,這將導致所需的輸出。