【问题标题】:C : recursively defined program to calculate determinant of a matrixC:递归定义的程序来计算矩阵的行列式
【发布时间】:2013-10-17 11:13:09
【问题描述】:

我不明白为什么这个程序会为矩阵生成错误的行列式值。该程序使用对函数 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));
}

【问题讨论】:

  • 标签应该是 C,而不是 C++。代码中没有 C++,你不会在 C++ 中这样写。
  • 另外,在这种情况下,func 如果您只使用一个带有三元运算符的return 会更清晰。
  • 对不起先生你是对的..

标签: c recursion


【解决方案1】:

这不是正确的公式。见here

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

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

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

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2019-03-25
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 2013-05-12
  • 2015-05-25
相关资源
最近更新 更多