Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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 - Fatal编程技术网

Python递归回溯变量

Python递归回溯变量,python,recursion,Python,Recursion,我正在写一些递归函数。认为它的原型是: def path(a, row=0, col=0, weight=0, cumulative=[]) 我试图在矩阵a中找到一些路径。权重将添加到目前为止该路径的值,而累积将跟踪该路径 在某些情况下,这会被调用: return path(a, row+1, col, weight, cumulative) + path(a, row+1, col+1, weight, cumulative) 现在基本情况如下: cumulative.append(a[r

我正在写一些递归函数。认为它的原型是:

def path(a, row=0, col=0, weight=0, cumulative=[])
我试图在矩阵
a
中找到一些路径。权重将添加到目前为止该路径的值,而累积将跟踪该路径

在某些情况下,这会被调用:

return path(a, row+1, col, weight, cumulative) + path(a, row+1, col+1, weight, cumulative)
现在基本情况如下:

cumulative.append(a[row][col])
weight = weight + a[row][col]
return weight
它将当前矩阵元素添加到累积中,添加权重并返回权重。问题是每次
cumulative
调用append时,它都会添加到同一个
cumulative
实例中。如何确保每个递归堆栈帧采用不同的
累积

因此,当在基本情况下调用append时,我希望累计调用的值是帧调用方的值,而不是上一个递归堆栈帧的值


有什么建议吗?谢谢。

你可以打电话给我一份累积:

return path(a, row+1, col, weight, list(cumulative)) + 
       path(a, row+1, col+1, weight, list(cumulative))

您可以使用以下内容的副本拨打电话:

return path(a, row+1, col, weight, list(cumulative)) + 
       path(a, row+1, col+1, weight, list(cumulative))

cumulative=cumulative[:]
?如果您不介意发布的话,查看您的整个功能会很有帮助:)有一件事我会指出,以防您不知道。如果将默认参数设置为列表等可变值(例如,
累计=[]
),则在读取函数定义时,该值仅初始化一次。这意味着任何时候你调用
路径
而不指定
累计
,都将使用相同的列表。谢谢Michael-是的,我知道这一点。下面的mux回答了这个问题。我需要为每一帧创建一个单独的累积实例。显然Python是通过引用传递的(我现在要读的内容)。
cumulative=cumulative[:]
?如果您不介意发布,那么查看整个函数会很有帮助:)如果您不知道的话,我会指出一件事。如果将默认参数设置为列表等可变值(例如,
累计=[]
),则在读取函数定义时,该值仅初始化一次。这意味着任何时候你调用
路径
而不指定
累计
,都将使用相同的列表。谢谢Michael-是的,我知道这一点。下面的mux回答了这个问题。我需要为每一帧创建一个单独的累积实例。显然Python是通过引用传递的(这是我现在要读的内容)。