c - 如何使用递归遍历二维数组
问题描述
我正在寻找帮助我使用递归遍历和显示二维数组或矩阵的人。
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);
}
我知道如何遍历一维数组但无法做到这一点。我想使用递归显示矩阵中的每个元素。
解决方案
首先,尚不清楚为什么需要递归解决方案。也许这是一个问题,但我发现递归很难编写、阅读和调试。无论如何,我允许自己修改您的 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>
如果内部数组都具有相同的大小。
推荐阅读
- macos - 是否可以仅使用简单的配置文件以非 root 用户身份运行 httpd?
- powerbi - 从多个 pdf 表单中提取数据,转换为 PBI/PQ 的可行格式?
- node.js - MongoDB Node.JS insertOne 错误:“类型 'string' 不可分配给类型 'ObjectId | undefined”
- bash - 使用 bash 选择大于 0 且小于 4 的整数
- vuejs3 - 使用 Auth0 作为第三方访问提供者时,Fauna 返回“未经授权”
- mysql - 将嵌套关系作为列加入
- qt - 文本区域溢出时QML scrollView滚动条不出现
- swift - 无法挂起 URLSessionDataTask 的实例
- python - PySimpleGui - 没有名为“_tkinter”的模块
- php - Kreait Firebase 数据库无法删除生产中的子项