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/