【问题标题】:How to initialize an integer in a recursive function, only when the function is called from other functions?仅当从其他函数调用该函数时,如何在递归函数中初始化整数?
【发布时间】:2016-11-30 06:14:47
【问题描述】:

我写了一个计算两个矩阵相乘的函数。 这是功能:

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 并从主函数再次调用该函数之后),它不会被初始化为零。 我已经使用全局变量“sum”解决了这个问题,并在每次调用“entrycal”函数时在主函数中初始化它,但我喜欢不使用全局变量来解决它。有可能吗?

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

对不起我的英语

谢谢

【问题讨论】:

  • 有什么理由不能循环执行此操作吗?它将速度提高一千倍,消耗更少的内存并且更具可读性。

标签: c function recursion


【解决方案1】:

直接回答你的问题:

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

【讨论】:

  • 非常感谢!!我在考虑一些中间变量!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多