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/

10-12 03:00