我最近一直在使用topcoder,我偶然发现了一个我无法理解的问题.问题是找到给定"n"的F(n)= f(1)+ f(2)+ .... + f(n),使得f(n)是n的最大奇数除数.答案有很多简单的解决方案; 但是,我发现这个解决方案非常有趣.
int compute(n) {
if(n==0) return 0;
long k = (n+1)/2;
return k*k + compute(n/2);
}
Run Code Online (Sandbox Code Playgroud)
但是,我不太明白如何从诸如此类的问题语句中获取递归关系.有人可以帮忙吗?
小智 11
我相信他们正试图使用以下事实:
现在将{1,2,...,2m + 1}拆分为{1,3,5,7,...}和{2,4,6,...,2m}并尝试应用上述事实.