可以使用递归, 但要配合缓存
查看原帖
可以使用递归, 但要配合缓存
1368141
alanthinker楼主2024/8/20 17:09

可以使用递归, 但要配合缓存。 每次调用递归函数的时候, 首先判断该参数是否已经计算过了。 相同的参数总是会得到相同的返回值。

#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;
}
2024/8/20 17:09
加载中...