抱歉,如果有人已经问过这个问题,但没有找到。
我在想,为了探索它的所有值,我必须传递给递归函数的最小参数数量是多少。
我举个例子;假设我想编写一个函数,它返回 MXM 矩阵中包含的所有值的总和,我肯定可以这样做(并且做到了),如下所示:
int sum(int mat[][M], int i, int j){
if(j==M-1&&i==M-1){
return mat[i][j];
}
if(j==M){
i++;
j=0;
}
return mat[i][j] + sum(mat, i, j+1);
}
调用
sum(mat,0,0);
我得到了结果。
我的问题是:用更少的参数编写函数可以获得相同的结果吗? 关于示例:我可以通过编写如下函数获得相同的结果:
int sum(int mat[][M], int i){...}
或者只是
int sum(int mat[][M]){...}
?
更抽象地说,为了探索矩阵,我需要传递给递归函数的最小参数数量是多少?
谢谢大家。
最佳答案
您可以使用一个参数来完成此操作,方法是将其作为要添加的元素的行主索引。该函数可以从中计算行索引和列索引。
int sum(int mat[M][M], int x){
int i = x / M;
int j = x % M;
if(j==M-1 && i==M-1){
return mat[i][j];
}
return mat[i][j] + sum(mat, x+1);
}
您不能仅通过传递数组来做到这一点,因为您需要某种方式来告诉您何时到达基本情况,以便递归应该停止。递归调用必须有一些每次都会更改的参数,以更接近基本情况。但数组值不会改变。
关于c - 递归函数探索矩阵的最小参数数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59803160/