You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何递归向vector中添加元素?我的组合数生成代码问题求助

代码存在的问题分析
  • 递归结果未合并:每次递归调用generateVector(x, y)都会生成新的std::vector,但你没有将递归返回的vector元素合并到当前函数的v中。比如初始调用generateVector(4,4)时,只会把4C4加入v,后续递归生成的4C3、4C2等元素都会被丢弃,最终返回的vector只有第一个元素。
  • 函数调用不符合需求:你要存储的是组合数(nCk),但代码中调用的是permutation(x, y),如果这个函数用于计算排列数(nPk),那结果完全不符合预期,需要替换为组合数计算函数。
  • 递归冗余开销:每次递归都新建vector并进行拷贝操作,会造成不必要的性能损耗,这属于功能实现后的优化点。

修复后的示例代码

std::vector<int> generateVector(int x, int y){
    std::vector<int> v;
    if(y < 0){
        return v;
    }
    // 调用组合数计算函数替换排列数函数
    v.push_back(combination(x, y));
    --y;
    // 将递归返回的子vector元素合并到当前vector
    auto subVec = generateVector(x, y);
    v.insert(v.end(), subVec.begin(), subVec.end());
    return v;
}

// 组合数计算函数实现示例
int combination(int n, int k) {
    if(k == 0 || k == n) return 1;
    k = std::min(k, n - k); // 利用组合数对称性减少计算量
    int result = 1;
    for(int i = 1; i <= k; ++i){
        result = result * (n - k + i) / i;
    }
    return result;
}

内容的提问来源于stack exchange,提问作者jcfan91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:50:32