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 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/