首页 > 解决方案 > Python - 使用递归返回遍历矩阵

问题描述

假设我有一个这样的矩阵:

array = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

我想做一个基本上遍历矩阵并打印出整数的方法,如下所示:

1,2,3,4,5,6,7,8,9

但我想递归地执行此操作,以便获得更多经验。我目前有这个方法和一个助手:

def flatten_array(matrix):
 return str(helper(len(matrix), len(matrix[0]), 0, 0, matrix))


def helper(current_row, current_col, i, j, matrix):
    s = ''
    if i >= current_row:
        return 1
    elif j >= current_col:
        return helper(current_row, current_col, i + 1, 0, matrix)
    else:
        s += str(matrix[i][j]) + ','
        print(matrix[i][j], end=',')
        helper(current_row, current_col, i, j + 1, matrix)
        return s

它打印这个:

1,2,3,4,5,6,7,8,9,

但我实际上想退回而不是打印,有人可以帮忙吗?

标签: pythonrecursiontraversal

解决方案


我已将您的代码修改为return扁平列表而不是打印。我已经传递了一个附加参数ans,它是一个list用于存储矩阵值的参数。

array = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

def flatten_array(matrix):
 return helper(len(matrix), len(matrix[0]), 0, 0, matrix, [])


def helper(current_row, current_col, i, j, matrix, ans):
    if i >= current_row:
        return 1
    elif j >= current_col:
        return helper(current_row, current_col, i + 1, 0, matrix, ans)
    else:
        ans.append(matrix[i][j])
        helper(current_row, current_col, i, j + 1, matrix, ans)
        return ans

print(flatten_array(array))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

推荐阅读