Python - 递归字谜函数
Python - Recursive anagram function
我正在做家庭作业,有点卡住了,需要一些帮助。
我不想把答案交给我,但如果我能得到一些帮助或提示,我将不胜感激。
我必须创建一个只有 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
让我们在没有代码的情况下思考一下,从一般情况开始。假设您已经知道 "bc"
的排列,它们是 ["bc", "cb"]
。如何将 "a"
添加到组合中?我将采用目前生成的每个元素,并在每个位置插入 a
。所以,取 "bc"
,并在每个位置插入 "a"
,你得到 ["abc", "bac", "bca"]
。然后用 "cb"
做同样的事情。这将我们引向基本情况:由于每次递归都会乘以结果数,因此基本情况中的结果数必须为 1,而不是 0,因为当我们迭代上一级的解决方案时,您将无法追加任何东西,因为什么都没有。因此,anagrams("")
必须 return [""]
(以便稍后插入 "c"
可以将其放入唯一的位置)。
不幸的是,这已经是我们正在讨论的两个循环(即使具有算法的一般递归性质):一个迭代 ["cb", "bc"]
,一个迭代要插入的位置 "a"
.如果你可以使用理解,你可以很容易地做到这一点。如果你不能,那么...每个循环都可以重写为递归,所以...让我再考虑一下。
我正在做家庭作业,有点卡住了,需要一些帮助。
我不想把答案交给我,但如果我能得到一些帮助或提示,我将不胜感激。
我必须创建一个只有 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
让我们在没有代码的情况下思考一下,从一般情况开始。假设您已经知道 "bc"
的排列,它们是 ["bc", "cb"]
。如何将 "a"
添加到组合中?我将采用目前生成的每个元素,并在每个位置插入 a
。所以,取 "bc"
,并在每个位置插入 "a"
,你得到 ["abc", "bac", "bca"]
。然后用 "cb"
做同样的事情。这将我们引向基本情况:由于每次递归都会乘以结果数,因此基本情况中的结果数必须为 1,而不是 0,因为当我们迭代上一级的解决方案时,您将无法追加任何东西,因为什么都没有。因此,anagrams("")
必须 return [""]
(以便稍后插入 "c"
可以将其放入唯一的位置)。
不幸的是,这已经是我们正在讨论的两个循环(即使具有算法的一般递归性质):一个迭代 ["cb", "bc"]
,一个迭代要插入的位置 "a"
.如果你可以使用理解,你可以很容易地做到这一点。如果你不能,那么...每个循环都可以重写为递归,所以...让我再考虑一下。