使用递归打印所有可能的组合

时间:2015-05-16 23:55:32

标签: python recursion

我正在尝试编写一个Python程序,输出使用形成的所有可能的字符串 字符c, a, t, d, og只使用一次递归。

到目前为止,我已经得到了这个:

i = ['c', 'a', 't', 'd', 'o', 'g']

counter = 0
def func(i):

    global counter

    i[counter], i[counter+1] = i[counter+1], i[counter]
    print(i)

    if counter != 5:
        counter += 1
        return func(i)

func(i)

编辑: 抱歉是“不礼貌”,但我只是从书中复制粘贴练习。这只是本书的纯文本。

2 个答案:

答案 0 :(得分:4)

不知道你正在尝试与你的一起或如何解决这个问题,抱歉。但这是一种方法。

def words(letters, word=''):
    letters or print(word)
    for letter in letters:
        words(letters - {letter}, word + letter)

words(set('catdog'))

letters or print(word)只是if not letters: print(word)的快捷方式。 Python的or评估左边部分,如果是“真理”,则返回,否则返回正确的部分。所以在这里,如果letters是真实的,即还有剩余的字母可供使用,那就是它。否则,打印。

这可能有点棘手,但我觉得这很自然。你可能听过“停止或我会开枪!”这句话,对吧?如果这个人停下来,那就是这个。否则,他们将被枪杀。在Python中也是如此。

答案 1 :(得分:0)

这个页面有一些很好的方法(我假设您不能使用itertools模块,所以请忽略这些帖子。)

StackOverflow Question 104420