我一直在阅读《算法》第四版,它定义了如下问题:
编写一个静态方法
lg()
,它以一个int
值N
作为参数,并返回Java中不大于以2为底的对数N
的最大int
。请不要使用Math库。
我找到了以下解决方案:
public static int lg(int N) {
int x = 0;
for (int n = N; n > 1; n/= 2) x++;
return x;
}
我想知道为什么这个解决方案有效。为什么连续除以2能帮助我们找到小于参数的以2为底的对数的最大整数?我理解Java,但不知道这个特定算法是如何工作的。
谢谢。