首页 > 解决方案 > 如何使用递归遍历二维数组

问题描述

我正在寻找帮助我使用递归遍历和显示二维数组或矩阵的人。

void display(int** matrix1,int row, int column)

这就是我为一维数组所做的:

void print_array(int arr[], int size, int i)
{

    if (i == size) {
        cout << endl;
        return;
    }
    cout << arr[i] << " ";
    print_array(arr, size, i+1);
}

我知道如何遍历一维数组但无法做到这一点。我想使用递归显示矩阵中的每个元素。

标签: carraysfunctionrecursiondefinition

解决方案


首先,尚不清楚为什么需要递归解决方案。也许这是一个问题,但我发现递归很难编写、阅读和调试。无论如何,我允许自己修改您的 1d 版本:

#include <iostream>
#include <vector>

void print_array(const std::vector<int>& arr,size_t i = 0) {
    if (i == arr.size()) {
        std::cout << '\n';
        return;
    }
    std::cout << arr[i] << " ";
    print_array(arr, i+1);
}

我使用size_t而不是int,因为这是与容器大小进行比较时要使用的类型。我提供了一个默认值,i因为当你调用它时你不想传递索引,而只是打印整个数组。std::endl不仅打印新行,而且还刷新流。在大多数情况下,这是不必要的。

对于 2D 情况,您只需添加第二个索引和进入下一行的条件。

也就是说,如果函数的签名是

void print_array(const std::vector<std::vector<int>>& arr,size_t i=0,size_t j=0)

并且它会打印,arr[i][j]然后您需要在不打印任何内容的情况下返回,i == arr.size()并且您必须在 时跳到下一行j== arr[i].size()。这可以通过以下条件来完成:

    if (j == arr[i].size()) {
        std::cout << '\n';
        print_array( arr, i+1,0);  // start with the first element of next row
        return;
    }

PS是你坚持 a int**,它应该很容易适应,但我强烈建议使用 a vector,甚至 astd::vector<std::array>如果内部数组都具有相同的大小。


推荐阅读