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是通过引用传递的(这是我现在要读的内容)。