【发布时间】:2012-01-06 17:30:54
【问题描述】:
当我在考虑快速计算数字幂的算法时提出了这个问题,比如计算 x^n。
在 Java 中,递归部分类似于:
return power(x,n/2) * power(x,n/2);
那么程序返回power(x,n/2)的值后,是否会再次遍历整个递归过程来计算第二个power(x,n/2)的值?
如果是这样,我们是否应该先将值存储在某个变量中,然后返回该值的平方?
【问题讨论】:
-
依赖于编译器,而不是JVM本身,但我相信你没有指定是正确的。
-
如果
power是不确定的会发生什么? -
@Jeffrey - 那么记忆化将是无效的优化。
-
@Kevin:由于JVM是字节码的即时编译器,它也可以在JVM中完成。
-
与其尝试优化低效的算法,我建议您只使用
Math.pow(x, n)使用这个和类似的方法来计算结果比维护结果缓存更快。 (而且更简单)
标签: java algorithm recursion memoization