Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中递归函数的输出_Python_Recursion_Return_Permutation - Fatal编程技术网

Python中递归函数的输出

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],

我构建了以下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], 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
本身,所以每当看到更改时,输出中的所有元素都会更改。太好了,这就行了!