向量作为 C++ 中递归函数的参数

vector as an argument for recursive function in c++

我想拥有标题中的功能,但是当我这样声明时,

void function(vector<int> tab, int n)
{
    if(n > 0)
    {
        tab.push_back(n);
        function(tab, n - 1);
    }
}

它不起作用,因为 tab 仍然是空白的。

您正在按值获取 tab - 每次递归调用都会对 tab 的新副本进行操作。

您需要通过引用传递 tab

void function(std::vector<int>& tab, int n) { ... }

如果您想修改在函数范围之外声明的向量,您应该通过引用传递它

void function(vector<int>& tab, int n)

否则,每次调用 function 都会创建 tab 的函数本地副本,并且只会改变该副本,而不是原始外部向量。

要么您需要将第一个参数声明为具有引用类型std::vector<int> &,如

void function( std::vector<int> &tab, int n);

或者您应该重新定义函数,使其 return 成为向量。

这是一个演示程序。

#include <iostream>
#include <vector>

std::vector<int> function( int n )
{
    std::vector<int> v;

    return n > 0 ? v = function( n - 1 ), v.push_back( n ), v : v;
}

int main()
{
    auto v = function( 10 );

    for (auto &item : v)
    {
        std::cout << item << ' ';
    }
    std::cout << '\n';
}

程序输出为

1 2 3 4 5 6 7 8 9 10