c++11 - 递归函数不返回向量正确列出
问题描述
我正在尝试使用递归函数创建一个包含 10 个介于 1 和 20 之间的唯一随机数的列表。这是代码。
编译器:GNU g++ 10.2.0
在 Windows 上
编译器标志:-DDEBUG=9 -ansi -pedantic -Wall -std=c++11
#include <iostream>
#include <vector>
#include <algorithm>
#include <time.h>
using namespace std;
vector<int> random (int size, int range, int randnum, vector<int> randlist ) {
if (size < 1) {
cout << "returning...(size=" << size << ")" << endl;
return randlist;
}
else {
if (any_of(randlist.begin(), randlist.end(),[randnum](int elt) {return randnum == elt;})){
cout << "repeating number: " << randnum << endl;
random(size, range, rand() % range + 1, randlist);
return randlist;
}
else {
cout << "size " << size << " randnum " << randnum << endl;
randlist.push_back(randnum);
random(size-1, range, rand() % range + 1, randlist);
return randlist; }
}
}
int main (int argc, char *argv[]) {
srand (time(NULL));
vector<int> dummy{};
vector<int> uniqrandnums = random(10, 20, (rand() % 20) + 1, dummy );
cout << "here is my unique random numbers list: " ;
for_each(uniqrandnums.begin(),uniqrandnums.end(), [](int n){cout << n << ' ';});
}
为了跟踪唯一的随机数,我cout
在递归函数中添加了 2 行random
。递归函数似乎运行正确,但无法正确返回结果vector<int
列表randlist;它似乎只返回一个列表,其中只有它找到的第一个随机数。
注意:估计函数最终会从这里返回:
if (size < 1) {
cout << "returning...(size=" << size << ")" << endl;
return randlist;
}
我最初并没有return randlist;
在递归函数中添加最后两行,但它给出了编译警告控制到达非无效函数的结尾 [-Wreturn-type]这就是为什么我添加了这两个返回语句但它只是警告消失了,它无助于正确操作。
问题:如何安排代码使递归函数 random
以正确的方式返回完整列表?
解决方案
问题是您正在丢弃对randlist()
. 在你打电话的两个地方:
random(..., randlist);
return randlist;
将其替换为:
return random(..., randlist);
推荐阅读
- javascript - 如何使用 json 脚本显示国家标志?
- c# - 运行所选代码生成器时出错:
- python - 如何动态定义和创建具有特定字段的自定义“直通”模型以及所有自定义多多字段的结构
- java - Android - 片段未替换
- applescript - 在 AppleScript 中使用 POSIX 表示法检查项目是否作为文件夹存在
- jupyter-notebook - MathJax 自动方程式编号在 Jupyter 中无法正常工作
- javascript - 从反应本机中的多个开关中获取价值
- xml - Application goes off on android studio when I click button to go to other activity?
- angular - 如何导入 providedIn: 根单例服务?
- perl - 已回答:用于解析存储在本地时间的不明确数据而不参考 DST 状态的 Perl 方法