0

我正在编写一个简单的密码求解器,并且无法“展开”递归函数。我必须出于其他原因展开它,否则我会让它递归。

想法是这样的:我有可变数量的列表,每个列表中都有单词。该函数的工作是遍历每个列表,并在检查单词是否适合当前的字母表设置后,找到它的分数。因此,如果您有以下列表:

LIST1: [the, and, can,...]
LIST2: [kids, cars, knee,...]
LIST3: [talks, walks, music,...]
...

并且该函数需要遍历每个列表(按顺序)并尝试找到最佳句子。(我有一个评分算法,它调用它来比较。)它从第一个列表中的第一个单词开始,然后迭代第二个列表直到找到一个有效的单词,然后开始迭代第三个列表直到它找到那个单词列出有效的单词等。一旦用尽了第三个列表中的单词,它应该返回到第二个并找到下一个有效的单词,继续该过程直到完成。

我尝试使用 Product 功能,但这并不能以正确的方式工作……这只是给了我所有可能的组合,并且在技术上有效,但效率不高。

def find_sentence():
cycle through first list:
cycle through second list:
if word works:
start cycling through third word list.
else: 
keep cycling through 2nd word list.
...

继续前进,直到我们浏览完所有单词列表,找到高于阈值的分数..

有什么帮助吗?

来自 Bakuriu 的回复:感谢您的快速回复!我在 Python 方面不是那么好,但我认为这不是我需要的方式。您的解决方案类似于 Product 方法,因为它的目标是找到所有有效(或符合分数)的单词。我需要使用的方法是: 1. 从第一个列表中的第一个单词开始。2. 开始迭代下一个单词列表。3. 一旦其中一个词起作用,就开始浏览第三个列表,等等。 4. 当你到达最后(到最后一个词列表)并找到候选人时,你现在有了一个解决方案,因为你在每个有效的列表中都有一个单词。5. 如果说,列表 3 中的一个词不适合,您必须返回列表 2 并继续搜索该列表,找到下一个有效的词,继续从列表 3 重新开始,并继续直到没有任何工作或者您' 已经到了尽头。我希望这很清楚。如果我能澄清任何事情,请告诉我。

4

1 回答 1

0

实际上,您实际上根本不需要递归。

def find_sentence(*variable_number_of_lists):
    out = []
    for eachlist in variable_number_of_lists:
        for word in eachlist:
           if scoreword(out, word) > threshhold:
               # presumably, your 'scoreword' function would take in the current
               # list of okayed words in order to find the most recent one for use
               # in your scoring, if I've understood the problem correctly
               out.append(word)
               break

    return out
于 2012-12-03T17:06:35.050 回答