我想根据嵌套循环的深度创建一个函数:

如果深度= 1:

for(i = 0; i < max; i++){
    pot[a++] = wyb[i];
}

如果深度= 2:
for(i = 0; i < max; i++){
    for( j = i+1; j < max; j++){
        pot[a++] = wyb[i] + wyb[j];
    }
}

如果深度= 3:
for(i = 0; i < max; i++){
    for( j = i+1; j < max; j++){
        for( k = j+1; k < max; k++){
            pot[a++] = wyb[i] + wyb[j] + wyb[k];
        }
    }
}

等等。

因此结果将是:

深度= 1
pot[0] = wyb[0]
pot[1] = wyb[1]
...
pot[max-1] = wyb[max-1]

深度= 2,最大= 4
pot[0] = wyb[0] + wyb[1]
pot[1] = wyb[0] + wyb[2]
pot[2] = wyb[0] + wyb[3]
pot[3] = wyb[1] + wyb[2]
pot[4] = wyb[1] + wyb[3]
pot[5] = wyb[2] + wyb[3]

我想你应该已经明白了。我想不出一种巧妙地做到这一点的方法。

有人可以提出一种使用递归的简单方法(或者可能不是吗?)来实现这一目标,同时牢记我仍然是c++的初学者,可以向我指出正确的方向吗?

感谢您的时间。

最佳答案

您可以使用std::next_permutation来管理组合:

std::vector<int> compute(const std::vector<int>& v, std::size_t depth)
{
    if (depth == 0 || v.size() < depth) {
        throw "depth is out of range";
    }
    std::vector<int> res;
    std::vector<int> coeffs(depth, 1);
    coeffs.resize(v.size(), 0); // flags is now {1, .., 1, 0, .., 0}

    do {
        int sum = 0;
        for (std::size_t i = 0; i != v.size(); ++i) {
            sum += v[i] * coeffs[i];
        }
        res.push_back(sum);
    } while (std::next_permutation(coeffs.rbegin(), coeffs.rend()));
    return res;
}

Live example

关于c++ - C++可变数量的嵌套循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25138049/

10-10 18:39