Python 产生无限结果的字谜代码

Python 产生无限结果的字谜代码,python,algorithm,recursion,Python,Algorithm,Recursion,我需要为应用程序生成字谜。我使用下面的代码来生成字谜 def anagrams(s): if len(s) < 2: return s else: tmp = [] for i, letter in enumerate(s): for j in anagrams(s[:i]+s[i+1:]): tmp.append(j+letter) pr

我需要为应用程序生成字谜。我使用下面的代码来生成字谜

def anagrams(s):
    if len(s) < 2:
        return s
    else:
        tmp = []
        for i, letter in enumerate(s):
            for j in anagrams(s[:i]+s[i+1:]):
                tmp.append(j+letter)
                print (j+letter)
    return tmp

有人能告诉我哪里出了问题吗?我需要一个字符串的唯一字谜这不是无限的结果,这是13!(*)字(略超过60亿);你正面临一场组合爆炸


(*)13阶乘。

没有infinte结果-只有13!或6227020800

你只是没有足够长的时间等待60亿的结果


请注意,大部分输出都是重复的。如果您打算不打印副本,那么结果的数量就会小得多。

其他人指出,您的代码生成13个!字谜,其中许多是重复的。然而,你的11个z和2个i的字符串只有78个唯一的字谜。(这是13!/(11!·2!)或13·12/2。)

如果只需要这些字符串,请确保同一个字母不会重复出现多次:

def anagrams(s):
    if len(s) < 2:
        return s
    else:
        tmp = []
        for i, letter in enumerate(s):
            if not letter in s[:i]:
                for j in anagrams(s[:i] + s[i+1:]):
                    tmp.append(letter + j )
        return tmp
def字谜:
如果长度小于2:
返回s
其他:
tmp=[]
对于i,枚举中的字母:
如果不是s[:i]中的字母:
对于字谜中的j(s[:i]+s[i+1:]):
tmp.追加(字母+j)
返回tmp

附加测试可能不是判断某个字母是否已被使用的最有效方法,但如果您有许多重复的字母,它将节省大量的递归。

是否希望您的特定代码正常工作,或者你只是想在Python中找到一种很好的字谜吗?
返回单词
:什么是
单词
?显然他指的是
s
。他在
for
语句中调用函数的事实应该引起更多的注意。为什么在
for
语句中调用函数需要引起注意?@Kevin Guan-我的意思是“不是”字嗨,如果我错了,请纠正我。我没有得到那么多的结果,因为我只是复制了这段代码,粘贴到ideone.com并运行。我没有得到什么结果。请检查一下,让我知道。谢谢,如果你坚持-你错了:)返回tmp的
标签缩进了
所以是从内部循环返回的。我已经用正确的缩进更正了代码,现在我能够重现无限的结果:)请检查代码,如果我错了,请更正我。我没有得到那么多的结果,因为我只是复制了这段代码,粘贴到ideone.com并运行。我没有得到什么结果。请查看ideone.com/EAOw2j并告诉我。谢谢
def anagrams(s):
    if len(s) < 2:
        return s
    else:
        tmp = []
        for i, letter in enumerate(s):
            if not letter in s[:i]:
                for j in anagrams(s[:i] + s[i+1:]):
                    tmp.append(letter + j )
        return tmp