#include<iostream>
using namespace std;
int a[1001];
int comp(int n)
{
int ans = 1;//该数本身也属于半数集,故初始个数为1
if (a[n] > 0)//递归返回到这一步,如果a[n],不等于0,说明子问题已得到解决,不需要递归到底,避免了重复。
{
return a[n];
}
for (int i = 1; i <= n / 2; i++)//不超过自身一半
{
ans += comp(i);//递归
}
a[n] = ans;//保存结果
return ans;//最终返回的是ans而不是a[k],因为设置a[k],只是标记一下有的子问题已经求解出来,不需要递归到底,避免了重复.
}
int main()
{
int n;
cout << "请输入要求的数字" << endl;
cin >> n;
cout<<n<<"半数集的个数是"<<comp(n);
}