「n 个数里挑一些、能否凑出恰好 s」的骨架如下:
bool dfs(int i, int sum) {
if (i == n + 1) return sum == s;
if (dfs(i + 1, sum + a[i])) return true;
return dfs(i + 1, sum);
}
主函数调用 dfs(1, 0),数存在 a[1..n] 中。关于出口条件 i == n + 1,说法正确的是( )。
- A. 此时第 1 到第 n 个数都已做出「选 / 不选」的决定,sum 就是这个方案的最终和,正好检查它是否等于 s
- B. 出口设在 n + 1 意味着第 n 个数还没被过堂,方案里漏了一个数
- C. 出口应该写成
i == n,写n + 1会让 i 永远加下去,死循环 - D. 走到出口时 sum 还是初始的 0,什么都没累加,检查没有意义