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

Python类中递归打印矩阵重复输出首数组,求错误排查

问题排查与修复

核心问题分析

你的代码存在三个关键错误,直接导致反复打印第一个数组:

  • 递归时未使用传入参数:PrintMat方法全程依赖self.mtx(初始化时的原矩阵),完全忽略了传入的mtx参数。递归时虽然传递了self.mtx[1:],但方法内部仍操作原矩阵,永远触发不了长度为1的终止条件,只会无限打印原矩阵的第一个元素。
  • 调用方法传参错误:你调用matrix.PrintMat(matrix)时传入的是Matrix类实例,而非矩阵数据,会导致后续递归参数类型混乱。
  • 终止条件逻辑脱离递归流程:当前终止条件判断len(self.mtx)==1,和递归传入的参数毫无关联,无法正确终止递归。

修复后的代码

class Matrix:
    def __init__(self, mtx):
        self.mtx = mtx
        
    def PrintMat(self, current_mtx):
        # 基于传入的递归参数判断终止条件
        if len(current_mtx) == 1:
            print(current_mtx[0])
        else:
            print(current_mtx[0])
            # 递归传递切片后的当前矩阵
            self.PrintMat(current_mtx[1:])
            
    def properties(self):
        print(self.mtx)
        
matrix = Matrix(([1,2,3],[2,3,4]))
# 调用时传入实例存储的矩阵数据
matrix.PrintMat(matrix.mtx)

优化版本(可选)

如果不想每次调用都手动传参,可以把递归逻辑封装为内部辅助函数,对外提供无参调用接口:

class Matrix:
    def __init__(self, mtx):
        self.mtx = mtx
        
    def PrintMat(self):
        def _print_recursive(current_mtx):
            if len(current_mtx) == 1:
                print(current_mtx[0])
            else:
                print(current_mtx[0])
                _print_recursive(current_mtx[1:])
        # 初始调用传入实例的矩阵数据
        _print_recursive(self.mtx)
            
    def properties(self):
        print(self.mtx)
        
matrix = Matrix(([1,2,3],[2,3,4]))
matrix.PrintMat()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:12:18