可以使用递归, 但要配合缓存。
每次调用递归函数的时候, 首先判断该参数是否已经计算过了。 相同的参数总是会得到相同的返回值。
#include <bits/stdc++.h>
using namespace std;
std::vector<int64_t> v(1024, -1);
int64_t function1 (int max)
{
if(v[max]!=-1)
{
return v[max];
}
int64_t count = 0;
count += max;
for (int i = 1; i <= max; ++i)
{
int max2=i/2;
if(max2>0)
{
count += function1( max2 );
}
}
v[max]= count;
return count;
}
int main()
{
int n;
cin>>n;
int64_t count=0;
count = 1 + function1(n/2);
cout << count;
return 0;
}