c - 递归函数探索矩阵的最小参数数

标签 c recursion matrix arguments

抱歉,如果有人已经问过这个问题,但没有找到。

我在想,为了探索它的所有值,我必须传递给递归函数的最小参数数量是多少。

我举个例子;假设我想编写一个函数,它返回 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/

相关文章:

C多维数组指向问题?

c - shell 管工艺组 : ls | cat works but ls | more hangs?

c - 在 c 中使用 fscanf() 从格式化的测试文件中读取

javascript - JavaScript中的递归: don't quite understand

c# - 矩阵到数组c#

c++ - 具有已知矩阵的模板矩阵表达式

c - qsort()不适用于数字数组

python - 如何用递归替换嵌套的 for 循环?

c - 编写递归字符串反向器 我的较小输入是什么?

java - 方法性能比较