Python递归

use*_*363 0 python recursion

我必须生成所有可能的字母组合,表示电话中的数字序列...例如:如果条目为'423',则输出应为:

GAD   GAE   GAF   GBD   GBE   GBF   GCD   GCE   GCF    
HAD   HAE   HAF   HBD   HBE   HBF   HCD   HCE   HCF   
IAD   IAE   IAF   IBD   IBE   IBF   ICD   ICE   ICF
Run Code Online (Sandbox Code Playgroud)

我必须使用递归来解决这个问题...我开始使用这样的字典:

dic = {'2' : 'ABC', '3' : 'DEF', '4' : 'GHI', '5' : 'JKL', '6' : 'MNO', '7' : 'PQRS',     '8' : 'TUV', '9' : 'WXYZ'}
Run Code Online (Sandbox Code Playgroud)

但是我不知道怎样才能在这里使用递归...有人可以帮忙吗?

我认为这样的事情开头:

def telephoneSequence(str):
    for i in range (len(str)):
        return dic[str[i]]
Run Code Online (Sandbox Code Playgroud)

mgi*_*son 10

我想你正在寻找itertools.product:

>>> import itertools
>>> list(itertools.product('GHI','ABC','DEF'))
[('G', 'A', 'D'), ('G', 'A', 'E'), ('G', 'A', 'F'), ('G', 'B', 'D'), ('G', 'B', 'E'), ('G', 'B', 'F'), ('G', 'C', 'D'), ('G', 'C', 'E'), ('G', 'C', 'F'), ('H', 'A', 'D'), ('H', 'A', 'E'), ('H', 'A', 'F'), ('H', 'B', 'D'), ('H', 'B', 'E'), ('H', 'B', 'F'), ('H', 'C', 'D'), ('H', 'C', 'E'), ('H', 'C', 'F'), ('I', 'A', 'D'), ('I', 'A', 'E'), ('I', 'A', 'F'), ('I', 'B', 'D'), ('I', 'B', 'E'), ('I', 'B', 'F'), ('I', 'C', 'D'), ('I', 'C', 'E'), ('I', 'C', 'F')]
Run Code Online (Sandbox Code Playgroud)

这会给你一堆元组,但你可以''.join轻松地完成它们.

>>> list(''.join(p) for p in itertools.product('GHI','ABC','DEF'))
['GAD', 'GAE', 'GAF', 'GBD', 'GBE', 'GBF', 'GCD', 'GCE', 'GCF', 'HAD', 'HAE', 'HAF', 'HBD', 'HBE', 'HBF', 'HCD', 'HCE', 'HCF', 'IAD', 'IAE', 'IAF', 'IBD', 'IBE', 'IBF', 'ICD', 'ICE', 'ICF']
Run Code Online (Sandbox Code Playgroud)

当然,这不是递归的,如果你有其他约束力,也不会帮助你(也许教授?).我留下这个答案来证明python标准库有多强大,并且表明递归确实不是解决这类问题的最佳工具(至少在python中不是这样).