C:递归定义程序以计算矩阵的行列式

时间:2013-10-17 11:13:10

标签: c recursion

我无法理解为什么这个程序会为矩阵产生错误的行列式值。该程序使用函数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));
}

1 个答案:

答案 0 :(得分:2)

这不是正确的公式。请参阅here

您想实施拉普拉斯公式吗?在这种情况下,您需要对所有行求和,然后递归计算未成年人。这是通过移除第i行和第j列从A产生的矩阵的决定因素。这是递归使用函数的地方。

或者您想实施Leibniz公式吗?在这种情况下,您需要一个总和并迭代所有可能的排列,然后迭代一个产品,在那里迭代行数(或列)。但是那里你不需要递归。

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