この関数は、より小さな配列でうまく機能します。しかし、「int」の非常に大きな配列が与えられると、惨めに失敗します。調べたところ、内部ループのすべての変数を保持するのに十分なスペースを割り当てることができないため、メモリ不足のスタックが問題の原因であることがわかりました。では、これを回避するにはどうすればよいでしょうか。
void subsetSums(vector<int> arr, int l, int r, int sum=0) {
if(l > r){
cout << sum << ", ";
return;
}
subsetSums(arr, l+1, r, sum+arr[l]);
subsetSums(arr, l+1, r, sum);
}
int main(){
vector<int> arr(500000, 1);
subsetSums(arr, 0, arr.size()-1);
return 0;
}
今のところ、これを「ホットフィックス」したいだけです。そうすれば、この問題の最適解が見つかるかもしれません。