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

问题描述:

我写了一个函数来计算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; 
} 

我已经使用静态INT试过了,但是当我需要计算一个新条目(返回之和从main函数再次调用该函数后),它不会被初始化归零。 我已经使用全局变量“sum”解决了问题,并在每次调用“entrycal”函数时在主函数中初始化该函数,但我喜欢在不使用全局变量的情况下解决它。是否有可能?

第二个问题: 如果我的函数参数有问题,他们可以变得更好,我会很高兴了解更多!

对不起,我的英语

感谢

+0

是否有任何理由为什么你可以在循环中做这个?它会快上千倍,消耗更少的内存并且更具可读性。 – Lundin

直接回答你的问题:

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; 
} 
+0

非常感谢!我正在考虑一些中间变量! – SOFUser