Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 递归:子集和算法在参数中设置值_C++_Recursion_Subset Sum - Fatal编程技术网

C++ 递归:子集和算法在参数中设置值

C++ 递归:子集和算法在参数中设置值,c++,recursion,subset-sum,C++,Recursion,Subset Sum,调用该方法时,如何将blockIndex的值重置为初始状态 如果我调用它并传入值4。我检查该值是否大于9,如果不大于9,我将在位置(0)添加元素。但在跟踪我的函数时,我看到它将向量的所有值相加。我只希望它添加1个元素,然后当它检查它是否大于9时,将其恢复为初始值。我该怎么做 int NumCriticalVotes :: CountCriticalVotes(Vector<int> & blocks, int blockIndex) { if (blockIndex

调用该方法时,如何将
blockIndex
的值重置为初始状态

如果我调用它并传入值4。我检查该值是否大于9,如果不大于9,我将在
位置(0)
添加元素。但在跟踪我的函数时,我看到它将向量的所有值相加。我只希望它添加1个元素,然后当它检查它是否大于9时,将其恢复为初始值。我该怎么做

int NumCriticalVotes :: CountCriticalVotes(Vector<int> & blocks, int blockIndex)
{
    if (blockIndex >= 9 && blocks.isEmpty())
    {
        return 1;
    }
    if (blocks.isEmpty()) //Fail case
    {
        return 0;
    } else {

        int element = blocks.get(0);
        Vector<int> rest = blocks;
        rest.remove(0);
        return CountCriticalVotes(rest, blockIndex) || CountCriticalVotes(rest, blockIndex + element);
    }
}
int NumCriticalVotes::CountCriticalVotes(向量和块,int块索引)
{
if(blockIndex>=9&&blocks.isEmpty())
{
返回1;
}
if(blocks.isEmpty())//失败案例
{
返回0;
}否则{
int元素=blocks.get(0);
向量静止=块;
其余。移除(0);
返回CountCriticalVotes(rest,blockIndex)| CountCriticalVotes(rest,blockIndex+元素);
}
}

递归方法代码在哪里?您是否对递归方法设置了停止条件?如果(blockIndex>=9&&blocks.isEmpty())@Tom,您可以在
中删除
&&blocks.isEmpty()
,作为第一条注释,您不是想在最后一次返回中写入
。|元素+CountCriticalVotes(rest、块索引)
?换句话说,为什么要将向量元素的值与索引混合?从代码上看,这并不是很清楚。无论如何,即使是这样,代码还是可以改进的。另外,当您通过copy传递
blockIndex
时,当函数返回时(即在调用方上),它将“恢复”到其值。