Python中递归函数的输出
我构建了以下Python函数,它可以在任意长度的集合上打印置换。函数的输入是集合(a)的起始索引、集合(b)的结束索引和集合(例如[1,2,3]),输出是[1,2,3]、[1,3,2]、…]。下面编写的函数打印结果,但我想要的是一个“返回”结果的函数Python中递归函数的输出,python,recursion,return,permutation,Python,Recursion,Return,Permutation,我构建了以下Python函数,它可以在任意长度的集合上打印置换。函数的输入是集合(a)的起始索引、集合(b)的结束索引和集合(例如[1,2,3]),输出是[1,2,3]、[1,3,2]、…]。下面编写的函数打印结果,但我想要的是一个“返回”结果的函数 def backtracking (a, b, seed): if a == b: print(seed) else: for i in range(a, b+1): seed[a],
def backtracking (a, b, seed):
if a == b:
print(seed)
else:
for i in range(a, b+1):
seed[a], seed[i] = seed[i], seed[a]
backtracking(a + 1, b, seed)
seed[a], seed[i] = seed[i], seed[a]
nums = [1,2,3]
backtracking(0,len(nums) - 1,list(nums))
这里的代码试图返回一个结果,但是输出的形式是[1,2,3,1,3,2,…],而我想要的是[1,2,3],[1,3,2],…]。稍后我可以轻松地正确转换结果,但我希望有一个干净的解决方案,直接从函数输出所需的结果。我还尝试将第3行改为:output+=[seed],结果只是一个重复的[1,2,3]列表。与output.append(seed)类似。为什么output.append(seed)不能正确地附加到输出中,我如何使它这样做?如果您能帮助解决此问题,我们将不胜感激
def backtracking (a, b, seed, output):
if a == b:
output += seed
else:
for i in range(a, b+1):
seed[a], seed[i] = seed[i], seed[a]
backtracking(a + 1, b, seed, output)
seed[a], seed[i] = seed[i], seed[a]
return(output)
nums = [1,2,3]
backtracking(0,len(nums) - 1,list(nums),[])
您需要
output+=[seed.copy()]
因为您正在添加列表seed
本身,所以每当看到更改时,输出中的所有元素都会更改。太好了,这就行了!