C++ 不追加数字的递归函数

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

我一直在试图弄明白为什么我的递归函数不返回任何数字<原始函数调用中的code>vi为
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}