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
相关产品推荐
相关产品推荐

