【发布时间】:2016-06-09 20:11:12
【问题描述】:
我有一个重复添加元素的二维向量。我知道如何使用嵌套的 for 循环来做到这一点。但是,我想知道是否有办法使用递归来做到这一点?这是我使用循环的代码:
#include <vector>
#include <iomanip>
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::setw;
using std::vector;
int main() {
vector<vector<int > >test;
int items;
cout<< "How many items" <<endl;
cin>> items;
for (int i = 0; i < items+1; i++) {
vector<int> row; // Create an empty row
for (int j = 0; j < items+1; j++) {
row.push_back((i-1)+j); // Add an element(column) to the row
}
test.push_back(row);
}
for (int i = 1; i < items+1; i++) {
for (int j = 1; j < items+1; j++) {
cout << setw(4)<<test[i][j];
}
cout << endl;
}
return 0;
}
将其转换为递归函数的最有效方法是什么?
【问题讨论】:
-
出于好奇 - 当使用循环更简单、更清晰、更好时,为什么要为此进行递归?
-
如果你得到更高维度的向量不是更有效吗?
-
@Flux21 大多数时候你不希望有一个向量的向量。您应该使用单个向量并通过使用数学将 nD 索引转换为 1D 索引来“伪造”维度。
-
使用递归会在堆栈帧之间复制向量时引入开销。在循环中执行此操作更有意义。
-
@tmsimont 如果您通过了参考,那么这应该不是问题。