递归求行列式不能输出结果

问题遇到的现象和发生背景

运用 拉普拉斯展开法行列式 的程序可以运行,但无法输出结果

遇到的现象和发生背景,请写出第一个错误信息

程序出现死循环类问题

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
//说明:该程序是一个计算行列式的程序,
//所运用的数学原理是拉普拉斯按行(列)展开,
//将高阶的行列式转化为低阶行列式以简化运算 
#include
#include 
#include
int main()
{
    void input(float *matrix,int n);//输入行列式 
    float det(float *matrix,int n);//求行列式的值 
    int n;
    float *matrix=NULL;
    printf("请问您想求解几阶行列式?  ");
    scanf("%d",&n);
    matrix=(float *)calloc(n*n,sizeof(float));
    input(matrix,n);
    printf("\n行列式的值为%f",det(matrix,n));
    return 0;
}
void input(float *matrix,int n)
{
    printf("请一行一行地输入行列式的元素\n");
    float *p;
    p=matrix;
    int i,j;
    for(i=0;ifor(j=0;jscanf("%f",matrix+i*n+j);
      }
    }
    matrix=p;//进行指针的复位 
}
float det(float *matrix,int n)//递归 
{
    void minor(float *p,float *matrix,int m,int n);
    float s=0,*p=NULL;
    int i;
    if(n==1) return(*matrix);
    else
    { for(i=0;ifloat *)calloc((n-1)*(n-1),sizeof(float));
        minor(p,matrix,i,n);
        s=s+pow(-1,i)*det(p,n-1);
        free(p);
      }
      return s;
    }
}
void minor(float *p,float *matrix,int m,int n)
//求行列式第1行第m列的余子式,
//我想的是就搞一个n-1阶的方阵,
//然后把原来n阶的方阵去一行去一列放进去
{
    int i,j,J;
    float *bf=matrix;
    for(i=1;ifor(j=0,J=0;j-1;J++)
      { if(j==m) continue;
        else
        { *(p+(i-1)*(n-1)+j)=*(matrix+i*n+J);
          j++;
        }
      }
    }
    matrix=bf;//进行指针的复位 
}


运行结果及详细报错内容

img

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

曾尝试检查递归有限性,还检查了其它循环,并未发现死循环……

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

能正确地输出结果。