【发布时间】:2014-05-22 07:24:51
【问题描述】:
我有一个用 C# 编写的递归方法/函数,它可以获取超过 90 行的二维数组的最大和路径。在大约 25 行时,递归停止。我试图克服实施为斐波那契制作的示例的问题。结果是,仍然溢出但结果也是错误的。这就是我所做的,我感谢大家的任何解决方案或建议。
编辑:仍然无法处理 90 行。
static long[,] cache = new long[1000, 1000];
private long GetTotal(int row, int column, long[,] triangle, long[,] cache)
{
if (row == 0) return triangle[row, column];
long myValue = triangle[row, column];
long left = myValue + GetTotal(row - 1, column, triangle, cache);
long right = myValue + GetTotal(row - 1, column + 1, triangle, cache);
if (cache[row, column] !=0)
return cache[row, column];
cache[row, column] = Math.Max(left, right);
return cache[row, column];
}
【问题讨论】:
-
如果实现为循环,这段代码会更快、更安全、更易读。那么递归到底实现了什么?
-
获取二维数组中三角形的最大路径和。
标签: c# arrays recursion dynamic-programming