我正在概括另一个有类似递归调用的问题。就我而言,所使用的变量是字符串,所以我不能简单地通过值来避免循环中递归调用之前和之后的代码。有没有办法把它变成一个迭代循环?请假设循环中递归调用之前和之后的代码无法更改以使此特定实例工作。
此代码测试以查看 nums 中的任何整数组合的总和是否为零。index 的原始值为 0,max 是我想在任何给定解决方案中加起来的最大数字数。
为了进一步澄清,数字可以重复,所以我不能尝试所有可能的组合,因为有无限多。
void findSolution(const vector<int>& nums, vector<int>& my_list, int& mySum,
int index, const int max)
{
if(mySum == 0) {
/* print my_list and exit(0) */
}
if(index < max) {
for(int i = 0; i < nums.size(); ++i) {
my_list.push_back(nums[i]);
mySum += nums[i];
findSolution(nums, my_list, mySum, index+1, max);
mySum -= nums[i];
my_list.pop_back();
}
}
}