c - 递归分而治之技术

标签 c

int **matMult(int **mat1,int **mat2,int **res,int N){

    static int i=0,j=0,k=0;
    if(i>=N)
    return 0;

    else if(i<N) 
    {
      if(j<N) 
      {
         if(k<N)
         {
             res[i][j]+=mat1[i][k]*mat2[k][j];
             k++;
             matMult(mat1,mat2,res,N);
         }

             k=0;
             j++;
             matMult(mat1,mat2,res,N);
      }
        j=0;
        i++;
        matMult(mat1,mat2,res,N);
    }
return res;
}

输出: 输入 N 的值:64 段错误(核心转储)

在 64 大小后显示此错误

最佳答案

代码本身没有明显的问题。如果它适用于较小的 N,则可以怀疑 N=64 的堆栈溢出。

使用递归进行矩阵乘法是众所周知的方法:

Matrix Multiplication

Matrix multiplication using the Divide and Conquer paradigm

对于实用的 C 解决方案检查:

Matrix Multiplication using divide and conquer approach

Strassen-recursive-matrix-multiplication.c

顺便说一句:您的代码与此处发布的代码非常相似:C Program to Perform Matrix Multiplication using Recursion .

关于c - 递归分而治之技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971063/

相关文章:

c - 在这个简单的 ffmpeg 示例中,这个指针在哪里被释放?

收集数据并将其存储到 EEPROM

c - 函数指针是邪恶的吗?

c - 使用通配符操作输入 .txt

c - 对3个人的年龄进行排序

C - 轻松将 void** 转换为 char* 吗?

c++ - 如何在 C/C++ 中检查文件是否正在使用?

c - gtk_label_set_text 内存泄漏

c - 如何在c中获取给定数据类型的最大值?

c - 我的随机 32 位生成错误