Recursion 用递归法加两个矩阵

Recursion 用递归法加两个矩阵,recursion,matrix,Recursion,Matrix,在我的编程课程中,我们只需要将两个矩阵与递归相加。显然,我们的教授打算让我们做一个递归方法,但仍然使用一个“for”循环来解决它。 然而,我仍然相信,使用for循环可以完成的所有事情都可以通过递归来完成。所以我试着去做: 方法应如下所示: public static int[][] addMatrix(int[][] matrix1, int[][] matrix2) 不能随传递其他变量 我很难解决这个问题,因为这是一个使用for循环的非常简单的练习-我认为递归非常可行 有什么帮助吗 --更新

在我的编程课程中,我们只需要将两个矩阵与递归相加。显然,我们的教授打算让我们做一个递归方法,但仍然使用一个“for”循环来解决它。 然而,我仍然相信,使用for循环可以完成的所有事情都可以通过递归来完成。所以我试着去做:

方法应如下所示:

public static int[][] addMatrix(int[][] matrix1, int[][] matrix2)
不能随传递其他变量

我很难解决这个问题,因为这是一个使用for循环的非常简单的练习-我认为递归非常可行

有什么帮助吗

--更新

到目前为止,我的思路是这样的: 要始终获取第一个矩阵的完整大小,并通过获取matrix2[matrix2.length]并调用其上的方法来逐步打破第二个矩阵,这样我就知道在不使用索引变量的情况下将该方法计算的值存储在何处。 说明:

X   X     Y   Y
X   X     Y   Y
X   X     Y   Y
X是martix1中的变量,Y是matrix2中的变量

X   X
X   X
X   X     Y  Y
以最后一行为例:

如果matrix2仅为1x1,则将其添加到matrix1中的相应索引中

这是我能想到的最好的方法。

使用“matrix2[matrix2.length]”你会超出范围,因为索引从0开始

下面是一些没有特定语言的伪代码,可以让您了解:

function addMatrices(mat1, mat2, result_mat /*pass by reference*/, i=0, j=0){
    if (j >= mat1[0].size)
        return result_mat;
    result_mat[i][j] = mat1[i][j] + mat2[i][j];
    i ++;
    if (i == mat1.size){
        i = 0;
        j ++;
    }
    return addMatrices(mat1, mat2, result_mat, i, j);
}

什么是两个矩阵相加
C[i][j]=A[i][j]+B[i][j]
?是的,二维数组中的每个数组都具有相同的长度(就像一个矩阵),请提供到目前为止您所做的操作您的条件“不可能传递其他变量”限制太大。有什么特别的原因吗?如果在递归函数中允许更多的参数,这是很容易解决的,这就是通常解决此类问题的方法。任何带有for循环的操作都可以通过递归来完成,但是如果您限制了递归可以使用的变量的数量,那么这个证明就不成立了。当然,你可以让matrix2变大,把你的助手变量隐藏在额外的行中,但这很不雅观。我知道这太严格了,这就是为什么当我去见我的教授时,他说他打算在里面使用for循环,而不是额外的变量。。。对于给定的方法,这是可能的吗?我想OP提到过,没有额外的变量可以通过。嗯,你是对的。但有很多解决办法,我怀疑这是否会成为一个问题。将索引存储在全局变量或自定义矩阵类的成员中。
function addMatrices(mat1, mat2, result_mat /*pass by reference*/, i=0, j=0){
    if (j >= mat1[0].size)
        return result_mat;
    result_mat[i][j] = mat1[i][j] + mat2[i][j];
    i ++;
    if (i == mat1.size){
        i = 0;
        j ++;
    }
    return addMatrices(mat1, mat2, result_mat, i, j);
}