Python-递归字谜函数

时间:2018-08-31 04:14:52

标签: python recursion anagram

我正在做家庭作业,有点困,请帮忙。

我不想把答案交给我,但是如果我能得到帮助或提示,我将不胜感激。

我必须创建一个字谜生成器,它只能进行1个递归函数调用,而不能进行for循环。

def anagram(st): 
if len(st) == 0:
    return []
else:
    if len(st) > 1:
        print(st)
        return [st] + [st[0]] + anagram(st[1:])
    else:
        print("test2",st)
        return [st[1:] + st[0]]

ana = anagram('abc') 

这是我的结果:['abc','a','bc','b','c'] 5

答案应该是:['abc','acb','bac','bca','cab','cba'] 6

1 个答案:

答案 0 :(得分:0)

让我们考虑一下没有代码,从一般情况开始。假设您已经知道"bc"的排列,它们就是["bc", "cb"]。如何将"a"添加到组合中?到目前为止,我将使用每个生成的元素,并将a插入每个位置。因此,取"bc",然后在每个位置插入"a",您将得到["abc", "bac", "bca"]。然后对"cb"执行相同的操作。这将我们引向基本情况:由于每个递归都乘以结果数,因此基本情况下的结果数必须为1,而不是0,因为当我们遍历上一级的解决方案时,您将无法追加什么都没有,因为那里什么也没有。因此,anagrams("")必须返回[""](以便以后插入"c"时将其置于它可以的唯一位置)。

不幸的是,这已经是我们要讨论的两个循环(即使具有算法的一般递归性质):一个循环遍历["cb", "bc"],另一个遍历插入"a"的位置。如果您可以使用理解力,则可以轻松完成此操作。如果不能,那么...每个循环都可以重写为递归,所以...让我想想更多。