我正在尝试不使用循环来解决问题,但是我找不到办法...
让我们以这个数组为例:(假设存在随机值)
1, 2, 3, 4, 5
2, 3, 4, 5, 6
3, 4, 5, 6, 7
4, 5, 6, 7, 8
5, 6, 7, 8, 9
通过发送(第2行,第1列),我想获得以下金额的总和:
1, 2
2, 3
3, 4
我编写此递归函数来解决此问题:
static int Func(int[,] matrix, int row, int column)
{
if (row == -1 || column == -1)
return 0;
int result = 0;
for (int i = 0; i <= column; i++)
{
result += matrix[row, i];
}
return result + Func(matrix, row - 1, column);
}
那行得通,但我想用额外的函数调用来代替循环...
答案 0 :(得分:0)
您总是可以通过考虑处理单个条目的函数来尝试简化递归,然后让其余条目由下一个递归调用处理
可以解决您问题的基本思路:尝试对矩阵右下角到左上角的数字求和(这样,您就可以对行/列使用负索引来验证何时到达矩阵的边界矩阵)。
因此,在您的特定情况下,有三个要点:
所以您可以这样写:
static int Func(int[,] matrix, int row, int column, int maxColumn)
{
// (C) All rows have been processed successfully: stop the recursion.
if (row < 0)
return 0;
// (B) All columns in the current line have been processed: go to the next row
// which you need to sum
if (column < 0)
return Func(matrix, row - 1, maxColumn, maxColumn);
// (A) The basic definition of your recursion
return matrix[row, column] + Func(matrix, row, column - 1, maxColumn);
}
在您的输入示例中,您可以简单地将其称为:
Func(yourMatrix, 2, 1, 1);
请注意,要使该算法起作用,您需要传递一个额外的变量maxColumn
,以使函数知道在移至需要处理的下一行时应使用的列号。显然,maxColumn
和column
参数在您第一次调用Func()
函数时必须始终相等。