c - 仅当从其他函数调用该函数时,如何在递归函数中初始化一个整数?

标签 c function recursion

我编写了一个函数来计算 2 个矩阵的乘法。 这是函数:

int entrycal(int i,int j,int m,int n,int k,int a[m][n],int b[n][k],int q) {
static int sum = 0;
sum += a[i][q] * b[q][j];
if ( q+1 < n )
    entrycal(i,j,m,n,k,a,b,q+1);
return sum;
}

我试过使用 static int ,但是当我需要计算一个新条目时(在返回 sum 并从 main 函数再次调用该函数之后),它没有被初始化为零。 我已经使用全局变量“sum”解决了这个问题,并在每次调用“entrycal”函数时在主函数中初始化它,但我喜欢不使用全局变量来解决它。这可能吗?

次要问题: 如果我的函数参数有问题并且它们可以变得更好,我很乐意了解更多信息!

抱歉我的英语不好

谢谢

最佳答案

直接回答您的问题:

int entrycal(int i,int j,int m,int n,int k,int a[m][n],int b[n][k],int q) {
    static int sum = 0;
    int total_sum = 0;
    sum += a[i][q] * b[q][j];
    if ( q+1 < n )
        entrycal(i,j,m,n,k,a,b,q+1);
    total_sum = sum;
    sum = 0;
    return total_sum;
}

但是我会这样实现它:

int entrycal(int i,int j,int m,int n,int k,int a[m][n],int b[n][k],int q) {
    int sum = a[i][q] * b[q][j];
    if ( q+1 < n )
        return sum + entrycal(i,j,m,n,k,a,b,q+1);
    return sum;
}

关于c - 仅当从其他函数调用该函数时,如何在递归函数中初始化一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40881517/

相关文章:

c - 如何选择第一个(第一个)数字作为数字的掩码

用二进制 : binary content got truncated when hit 0x00 连接字符串

function - 为什么函数调用被称为 "function call"?

python - 递归函数计算某个序列出现的次数

c - 了解汇编代码中的减法和乘法

c - 进程和信号量

java - 为什么返回的函数需要额外的转换(不兼容的类型)?

c++ - 设置声明值时调用函数

python - 两个递归 O(logn) 调用的大 O 运行时是多少?

c++ - 计算邻接矩阵最大环中的节点