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

n×n矩阵行列式计算程序运行异常,输入3×3矩阵触发索引错误

错误原因
  • 循环重置矩阵后没有重新移除首行:你仅在else分支开头执行了一次m.pop(0)移除首行,第一次循环结束后你将m重置为原始矩阵,后续循环没有重新移除首行,导致构造的子矩阵行数和列数不匹配,最终递归到2阶判断分支时,实际传入的是2行1列的矩阵,访问m[1][1]就会触发索引越界。
  • 1阶矩阵返回值错误:1阶矩阵的结构是[[x]],你当前返回m[0]得到的是列表[x]而非数值,后续计算会出现类型错误。
修复方案
  1. 把首行移除操作移到循环内部,每次重置矩阵后都重新执行m.pop(0),保证待处理的子矩阵行数始终是n-1,行列数匹配。
  2. 修改1阶矩阵的返回值为m[0][0],返回数值而非列表。
修复后的代码
import copy

def matrixdeterminant(m):
    if len(m) == 1:
        # 修正1阶矩阵返回值
        return m[0][0]
    elif len(m) == 2:
        return m[0][0] * m[1][1] - m[0][1] * m[1][0]
    else:
        matrixdeterminantlist = copy.deepcopy(m)
        determinantlist = []
        for i in range(len(matrixdeterminantlist[0])):
            # 每次循环都重置矩阵并移除首行
            m = copy.deepcopy(matrixdeterminantlist)
            m.pop(0)
            for j in range(len(m)):
                m[j].pop(i)
            determinantlist.append(matrixdeterminantlist[0][i] * matrixdeterminant(m) * (-1) ** (i + 2))
   
    return sum(determinantlist)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:45:03