遇到稍微有点不一样的递归,我就彻底晕了。马一下。
有点理解:分为两部分:一部分是不算自己递归,这样可以获得更多方式;另一部分是算上自己进行递归。
int c[25] = { 0 };
int slect(int a, int b) {
if (b == 0) return 1; //选择成功
if (a <= 0) return 0; //选择失败
return slect(a - 1, b) + slect(a - 1, b - c[a]);
}
int main()
{
int n;
while (cin >> n) {
for (int i = 1; i <= n; i++) {
cin >> c[i];
}
cout << slect(n, 40)<<endl;
}
return 0;
}