我一直试图找出为什么我的递归函数没有返回任何数字。 vi
为vector<int>
,原始函数调用中的x
为空。其他一切都无关紧要(正常工作)。应该发生的事情是c
被推回x
并返回x
。如果它没有返回任何内容并将c
推入全局向量,该函数可以正常工作。
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;
}
示例:
paths
是一个向量的向量。这是可视化的结构
{{1, 2, 1, 0},
{2, 3, 1, 0},
{1, 3, 1, 0}}
使用generate(paths, 2, 1, 3, 0, x)
调用。开始和结束是1和3.C从0开始.x是一个空的向量向量。
预期(澄清一些不是空的,订单并不重要):
{1, 2}
路径1到3的第一个数字,路径1到2的第二个数字以及路径2到3的数字。
答案 0 :(得分:0)
您按值传递x
。请尝试通过引用传递它:vi &x
。你的程序中也有bug。如果start
不等于end_
,则不会记录&#34;移动&#34;。