同様の再帰呼び出しを持つ別の問題を一般化しています。私の場合、使用されている変数は文字列であるため、ループ内の再帰呼び出しの前後のコードを回避するために単純に値を渡すことはできません。これを反復ループに変える方法はありますか? ループ内の再帰呼び出しの前後のコードを変更して、この特定のインスタンスを機能させることはできないと想定してください。
このコードは、nums からの int の任意の組み合わせの合計がゼロになるかどうかをテストします。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();
}
}
}