この再帰がどのように機能するかを理解する必要があります。単純な再帰の例は理解できますが、より高度な例は難しいです。問題が発生したコードは2行だけだと思っていましたが、return
ステートメント自体です。これがどのように機能するか、特に and/or 演算子については空白にします。どんな洞察も大歓迎です。
bool subsetSumExists(Set<int> & set, int target) {
if (set.isEmpty()) {
return target == 0;
} else {
int element = set.first();
Set<int> rest = set - element;
return subsetSumExists(rest, target)
|| subsetSumExists(rest, target - element);
}
}