2013-10-17 46 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

此外,在這樣的情況下,如果你只用一個'return'和三元運算符,'func'會更清晰。 –

+1

對不起,先生你說得對.. – pacman7845421

回答

2

這不是正確的公式。見here

你想實現拉普拉斯公式嗎?在這種情況下,您需要對所有行進行求和,然後遞歸計算未成年人。這是通過移除第i行和第j列而產生的矩陣的決定因素。這是遞歸使用你的函數的地方。

或者你想實施萊布尼茲公式?在這種情況下,您需要一個總和並遍歷所有可能的排列,然後遍歷行數(或列)的迭代產品。但是你不需要遞歸。

請注意,在這裏有很多類似的問題,例如, herehere

+0

非常感謝你! – pacman7845421