我正在做家庭作业,有点困,请帮忙。
我不想把答案交给我,但是如果我能得到帮助或提示,我将不胜感激。
我必须创建一个字谜生成器,它只能进行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
答案 0 :(得分:0)
让我们考虑一下没有代码,从一般情况开始。假设您已经知道"bc"
的排列,它们就是["bc", "cb"]
。如何将"a"
添加到组合中?到目前为止,我将使用每个生成的元素,并将a
插入每个位置。因此,取"bc"
,然后在每个位置插入"a"
,您将得到["abc", "bac", "bca"]
。然后对"cb"
执行相同的操作。这将我们引向基本情况:由于每个递归都乘以结果数,因此基本情况下的结果数必须为1,而不是0,因为当我们遍历上一级的解决方案时,您将无法追加什么都没有,因为那里什么也没有。因此,anagrams("")
必须返回[""]
(以便以后插入"c"
时将其置于它可以的唯一位置)。
不幸的是,这已经是我们要讨论的两个循环(即使具有算法的一般递归性质):一个循环遍历["cb", "bc"]
,另一个遍历插入"a"
的位置。如果您可以使用理解力,则可以轻松完成此操作。如果不能,那么...每个循环都可以重写为递归,所以...让我想想更多。