You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归实现矩阵行列式计算程序返回0问题求助

问题分析与修复方案

你的行列式计算程序始终返回0,是因为存在几个关键错误,逐一修正如下:

1. 变量类型不匹配

wyznacznik被声明为int类型,但矩阵元素是float,递归计算的子行列式也是float类型,累加时会强制转换为整数,直接导致精度丢失甚至错误结果。将其改为float类型:

float wyznacznik = 0;

2. 子矩阵指针未重置

每次构建完子矩阵后,podmacierz指针已经移动到分配内存的末尾,递归调用时传入的是无效的末尾指针,子矩阵数据完全错误。需要保存子矩阵的起始地址,每次构建前重置指针,同时记得释放内存避免泄漏:

float *podmacierz_start = podmacierz; // 保存子矩阵起始地址
// ... 构建子矩阵的代码 ...
// 递归调用时传入起始地址
wyznacznik += macierz[element_S]*( element_S % 2 ? -1: 1)* wznmacierz(podmacierz_start, rozmiar-1);
podmacierz = podmacierz_start; // 重置指针,为下一次构建子矩阵做准备
free(podmacierz_start); // 释放子矩阵内存

3. 打印格式错误

printf使用%d格式符打印float类型的返回值,会导致输出格式混乱。改成%f:

printf("%f", wznmacierz(a,2));

4. 主函数不符合标准

void main不是C标准的主函数写法,应改为int main()并返回0:

int main()
{
    float a[2][2]={{1,3},{9,8}};
    printf("%f", wznmacierz(a,2));
    return 0;
}

修复后的完整代码

#include<stdio.h>
#include<stdlib.h>

float wznmacierz(float* macierz, int rozmiar)/*"macierz" means a matrix and "rozmiar" is a size of matrix */
{
    if (rozmiar == 1)
        return *macierz;
    float *podmacierz = malloc((rozmiar-1)*(rozmiar-1)*sizeof(float)); 
    float wyznacznik = 0; 
    float *podmacierz_start = podmacierz; // 保存子矩阵起始地址
    for(int element_S = 0; element_S < rozmiar; element_S++) 
    {   
        podmacierz = podmacierz_start; // 重置指针到起始位置
        for (int w = 1 ; w < rozmiar; w++  ) 
        {    
            for(int kolumna = 0; kolumna < rozmiar; kolumna++)
            {   
                if(kolumna == element_S)
                    continue;
                *podmacierz = macierz[(rozmiar*w)+(kolumna)];
                podmacierz++;
            }
        }
        wyznacznik += macierz[element_S]*( element_S % 2 ? -1: 1)* wznmacierz(podmacierz_start, rozmiar-1);
    }
    free(podmacierz_start); // 释放子矩阵内存
    return wyznacznik;
}       

int main()
{
    float a[2][2]={{1,3},{9,8}};
    printf("%f", wznmacierz(a,2));
    return 0;
}

测试这个代码,输入的2x2矩阵行列式为1*8 - 3*9 = -19,程序会正确输出-19.000000。

内容的提问来源于stack exchange,提问作者krzys_13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:50:54