最近我一直在做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);
}
然而,我不太明白如何从这样的问题陈述中获得递归关系。有人可以帮忙吗?
f
和compute
是同一件事吗? - AakashM