1

私はいくつかの再帰関数を書いています。そのプロトタイプを次のように考えます。

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

現在の行列要素を累積に追加し、重みを追加して、重みを返します。問題は、 append を呼び出すたびcumulativeに、 のまったく同じインスタンスに追加されることですcumulative。各再帰スタック フレームが の異なるコピーを取るようにするにはどうすればよいcumulativeですか?

したがって、基本ケースで追加が呼び出されると、呼び出される累積の値が、前の再帰スタック フレームではなく、フレームの呼び出し元のものになるようにします。

助言がありますか?ありがとう。

4

1 に答える 1

1

累積のコピーで呼び出すことができます:

return path(a, row+1, col, weight, list(cumulative)) + 
       path(a, row+1, col+1, weight, list(cumulative))
于 2012-11-12T14:31:42.363 に答える