2013-10-17 4 views
1

이 프로그램이 왜 행렬의 행렬식 값을 잘못 생성하는지 이해할 수 없습니다. 이 프로그램은 func() 함수에 대한 재귀 호출을 사용하여 인수 행렬을 미성년자로 변환 한 다음 궁극적으로 단일 요소로 축소합니다. 제발,이 코드의 오류는 무엇입니까?C : 재귀 적으로 정의 된 행렬의 행렬을 계산하는 프로그램

#include<stdio.h> 
#include<math.h> 
void display_(int arr[][4]) 
{ 
    int i,j; 
    putchar('\n'); 
    for(i=0;i<4;i++) 
     {for(j=0;j<4;j++) 
      printf("%d\t",arr[i][j]); 
     printf("\n"); 
     } 
} 
int func(int arr[][4],int i,int j,int order) 
{ 
    if(order==1) 
     return arr[0][0]; 
    return(pow(-1,i+j)*arr[i][j]*func(arr,i+1,j+1,order-1)); 
} 
int main() 
{ 
    int i,j,matrix[4][4]; 
    printf("\nEnter the elements to the matrix : "); 
    for(i=0;i<4;i++) 
     for(j=0;j<4;j++) 
      scanf("%d",&matrix[i][j]); 
    display_(matrix); 
    printf("\nDeterminant : %d",func(matrix,0,0,4)); 
} 
+1

레이블은 C++가 아니고 C이어야합니다. 코드에는 C++이 없으므로 C++에서는 이와 같이 작성하지 않을 것입니다. –

+0

또한, 이와 같은 경우에,'func'는 삼항 연산자로 하나의'return' 만 사용하면 훨씬 더 명확 해집니다. –

+1

죄송합니다. 당신이 맞습니다. – pacman7845421

답변

2

올바른 수식이 아닙니다. here을 참조하십시오.

Laplace 수식을 구현 하시겠습니까? 이 경우 모든 행에 대해 합계가 필요하고 미성년자를 재귀 적으로 계산해야합니다. 그것은 i 번째 행과 j 번째 열을 제거함으로써 A의 결과 인 행렬의 결정 요인입니다. 그것이 재귀 적으로 함수를 사용하는 곳입니다.

또는 라이프니츠 공식을 구현 하시겠습니까? 이 경우 합계가 필요하며 가능한 모든 순열을 반복 한 다음 행 (또는 열) 수를 반복하는 제품을 사용해야합니다. 하지만 재귀가 필요하지 않습니다.

여기에 상당히 비슷한 질문이 있습니다 (예 : here 또는 here.

+0

대단히 고마워요! – pacman7845421

관련 문제