このコードはどこかでオンラインで見つけたので、それがどのように機能するかを理解しようとしています。partitions() 関数に整数を指定すると、コードは繰り返し数を含まない個別のパーティションの数を返します (例: n = 5 -> 2 つのパーティション (3,2) & (4,1))。この再帰的なソリューションがこれをどのように管理しているかを正確に理解したいと思います。私はコードをいじり、再帰呼び出しを追跡してきましたが、それがどのように機能するのかまだよくわかりません。理解を助けてください。
def partitions(n):
memo = [[0 for _ in range(n + 2)] for _ in range(n + 2)]
return bricks(1, n, memo) - 1
def bricks(h, l, memo):
if memo[h][l] != 0:
return memo[h][l]
if l == 0:
return 1
if l < h:
return 0
memo[h][l] = (bricks(h + 1, l - h, memo)) + (bricks(h + 1, l, memo))
return memo[h][l]