1

我不明白为什么这个程序会为矩阵产生错误的行列式值。该程序使用对函数 func() 的递归调用,该函数将参数矩阵转换为其次要矩阵,然后最终简化为单个元素。请帮忙,这段代码有什么错误..??

#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));
}
4

1 回答 1

2

这不是正确的公式。见这里

你想实现拉普拉斯公式吗?在这种情况下,您需要对所有行求和,然后递归计算未成年人。这是通过删除第 i 行和第 j 列从 A 得到的矩阵的行列式。那是您递归使用函数的地方。

或者你想实现莱布尼茨公式?在这种情况下,您需要求和并迭代所有可能的排列,然后需要一个乘积来迭代行(或列)的数量。但是你不需要在那里递归。

请注意,这里有很多类似的问题,例如这里这里

于 2013-10-17T11:22:48.177 回答