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
时,当函数返回时(即在调用方上),它将“恢复”到其值。