아래 코드는 순서 q 행렬의 행렬식을 계산합니다. 그것은 q = 3과 q = 2에서 작동하지만 q = 4 일 때 프로그램을 실행할 때마다 바뀌는 쓰레기 값을 출력합니다 : 여기서 무엇이 잘못됩니까? 코드에서재귀가있는 행렬의 결정자
#include <stdio.h>
#include <math.h>
int det(int q, int arr[q][q]);
int main(void)
{
int arr[4][4] = {
{2,4,9,8},
{6,3,4,5},
{5,7,8,6},
{3,2,5,7}
};
printf("value of determinant is %d\n", det(4, arr));
}
int det(int q, int arr[q][q])
{
if(q>2)
{
int i, j, k, m, n, s[q-1][q-1], d=0, cof;
for(k=-1,i=0,j=0;k<q-1;k++)
{
i=0;j=0;
for(m=1;m<q;m++,i++)
{
n=0;j=0;
for(n,j;n<k+1;n++,j++)
{
s[i][j] = arr[m][n];
}
n=q-1+k;
for(n;n<q;n++,j++)
{
s[i][j] = (arr[m][n]);
}
}
cof = (arr[0][k+1])*(pow(-1,k+1));
d += cof*det(q-1, s);
}
return d;
}
else if(q==2)
{
int d = ((arr[0][0])*(arr[1][1])-(arr[0][1])*(arr[1][0]));
return d;
}
}
디버거를 사용합니까? 브레이크 포인트로 단계별로 시도해 보셨습니까? 문제가 정확히 어디입니까? – ryyker
_basic_ 디버깅을 시도해 보셨습니까? –
왜이 용도로 재귀를 사용하고 있습니까? 코드가 너무 효율적이고 읽기 어려웠습니다. 그리고 왜 모든 변수에 난센스 이름을 하나의 문자로 제공합니까? – Lundin