普通递归写法(速度慢):
#include <iostream>
using namespace std;
int _count;
void func(int n) {
if (n < 2 && _count != 0)return;
for (int i = n / 2;i >= 1;i--) {
_count++;
n = i;
func(n);
}
}
int main()
{
int n;
cin >> n;
func(n);
cout << _count + 1 << endl;
return 0;
}
进阶写法(找规律)
a[i] = a[i / 2]+a[i / 2 - 1] + .... + a[1] + 1;
#include <iostream>
using namespace std;
int main()
{
int n;
int a[510] = { 0 };
a[1] = 1;
cin >> n;
for(int i = 2;i <= n;i ++){
for(int j = 1;j <= i / 2;j ++){
a[i] += a[j];
}
a[i] ++;
}
cout << a[n] << endl;
return 0;
}