C++ 不追加数字的递归函数
我一直在试图弄明白为什么我的递归函数不返回任何数字<原始函数调用中的code>vi为C++ 不追加数字的递归函数,c++,recursion,vector,C++,Recursion,Vector,我一直在试图弄明白为什么我的递归函数不返回任何数字vi为vector且x为空。其他一切都不相关(正常工作)。应该发生的是将c推回x并返回x。如果函数不返回任何内容并将cs推入全局向量,则该函数工作正常 vi generate(const vvi &paths, int index, int start, int end_, int c, vi x) { if (start == end_) { x.push_back(c); return
vector
且x
为空。其他一切都不相关(正常工作)。应该发生的是将c
推回x
并返回x
。如果函数不返回任何内容并将c
s推入全局向量,则该函数工作正常
vi generate(const vvi &paths, int index, int start, int end_, int c, vi x)
{
if (start == end_)
{
x.push_back(c);
return x;
}
for(auto path : paths)
{
if(path[0] == start)
{
x = generate(paths, index, path[1], end_, path[index] + c, x);
}
}
return x;
}
例如:
路径
是整数向量的向量。下面是可视化的结构
{{1, 2, 1, 0},
{2, 3, 1, 0},
{1, 3, 1, 0}}
使用生成(路径2、1、3、0、x)
调用。起点和终点分别为1和3。C从0开始。x是整数的空向量
预期(澄清,有些东西不是空的,顺序不重要):
路径1到3的第一个数字,路径1到2和路径2到3的第二个数字 您正在通过值传递
x
。尝试通过引用传递它:vi&x
。您的程序中也有bug。如果开始
不等于结束
您不记录“移动”。请提供一个具有预期输出的示例调用。您的编辑不构成具有预期输出的示例调用。您的预期输出完全取决于函数的输入,您不共享该输入。实际输出并不重要,只是推回起作用了。我会为你的网站编辑这篇文章input@qwr好的,现在我们有一个例子。。。您想要{1,2}
,但它会生成{2,1}
。。。问题是它是向后的吗?值和引用不应该返回相同的东西吗?嗯,是的,但仍然需要大量复制。您应该删除返回值,只使用引用。我发现了问题。我正在调用generate
,但没有保存向量。这就是为什么通过引用传递是有效的。
{1, 2}