【发布时间】:2010-07-19 16:14:47
【问题描述】:
我最近一直在研究 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这里是同一个东西吗? -
@Aakash:不,他们不是(如果正确的话),我已经编辑了这个问题。
-
您有一个错字:您使用的是“N”和“n”,请修正
-
@Jason :感谢您的指出!我已经解决了。