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

tro*_*dor 0 python recursion

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

到目前为止,我有这个:

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)
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ann 6

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

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

words(set('catdog'))
Run Code Online (Sandbox Code Playgroud)

letters or print(word)只是 的捷径if not letters: print(word)。Pythonor评估左边的部分,如果那是“真实的”,它返回那个,否则返回右边的部分。所以在这里,如果letters是真的,即还有剩余的字母可以使用,那么就是这样。否则,打印。

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