循环内循环
我有这个困难的任务(至少对我来说)。 这是一个抽象的问题,我会说数学。 假设我有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->
你需要了解什么recursion
means和如何能在你的代码中使用它。基本上你需要在自己内部调用相同的函数,n次,其中n是请求的深度级别。
从一些像斐波那契数列的小例子开始,你会找到实现你的函数的方法。
全部基于条件($deepness > 0)
。
根据我的理解,这里有一点小小的建议(伪代码)。
function findSimilar($words,$deepness) {
if($deepness == 0) {
return similarWordsOf($words);
} else {
return similarWordsOf(findSimilar($words,$deepness -1));
}
}
这是不是只给出了一个长长的过于相似的单词列表? –
这只是一个草稿功能。你会给他一个完整的解决方案吗? – Napolux
正如其他人已经指出的,所述关键解决方案是使用一个递归函数,即该再次调用自身的每个的使用减小深度值的类似的词的功能。
我的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
回报的类似的话清单,这将导致所需的输出。
下面是我写的主要代码,可能是效率不高的: – Ronen
不是3级给你1 + 8 + 64函数调用吗? – ickmund
听起来像简单的递归给我。 – Almo