半数集问题,求解方法:
#include <iostream>
using namespace std;
int half(int n)
{
int all = 1;
if (n == 1) //basecase:当n=1时,1的半数集只有一个就是他自己
return 1;
if (n > 1)
//当n>1时,通过得到的规律,
//它的半数集就是从1开始到它的一半的上取整半数集的和
//因此通过循环递归来获取n/2+1之前所有的半数集的和
{
for (int i = 1; i < n / 2 + 1; i++)
all += half(i);
}
return all;
//返回最终值
}
int main()
{
int n;
cin >> n;
cout << "all:" << half(n) << endl;
return 0;
}
//通过分析前10个数据,发现n的半数集的个数,等于从1开始n/2的上取整的半数集的和
//然后考虑basecase就是n=1的情况