Python 网格中的递归硬币收集

Python 网格中的递归硬币收集,python,recursion,memoization,Python,Recursion,Memoization,如何编写一个递归代码,告诉我可以从网格中收集的最大硬币数量,其中每个单元格可能包含也可能不包含只能向下和向右移动的硬币?我还必须使用备忘录 ex: [[0,0,1], [0,1,1], [1,0,0]] 仅向下和向右移动的最大硬币数=2首先,您需要此问题背后的递归关系:如果单元格[i][j]中的最大硬币数表示为C[i][j],则 C[i][j] = max(C[i - 1][j], C[i][j - 1]) + No. of coins on cell[i][j]

如何编写一个递归代码,告诉我可以从网格中收集的最大硬币数量,其中每个单元格可能包含也可能不包含只能向下和向右移动的硬币?我还必须使用备忘录

ex:  [[0,0,1],
      [0,1,1],
      [1,0,0]]

仅向下和向右移动的最大硬币数=2首先,您需要此问题背后的递归关系:如果单元格
[i][j]
中的最大硬币数表示为
C[i][j]
,则

C[i][j] = max(C[i - 1][j], C[i][j - 1]) + No. of coins on cell[i][j]
如果您使用这种循环进行编码,那么对于不同的单元,相同参数的相同调用将有许多重叠,其复杂性将是指数级的。为了避免这种情况,您可以将中间调用的结果存储在数组中,并在需要时使用它们。这样,您将只需要计算一次单元格的值,代码将更快


因此,首先创建一个2D数组,该数组将包含任何单元格中可以拥有的最大硬币数,然后使用递归关系使用适当的值填充该数组。从上到下,从左到右。

有更简单的方法来实现它,你确定要使用递归吗?经典的动态规划问题。是的,我正在尝试几种方法。这就是我感到困惑的地方。我不知道如何将结果存储在数组中。