Java 将Log2 Iterativ转换为Recursiv方式

Java 将Log2 Iterativ转换为Recursiv方式,java,recursion,Java,Recursion,我考虑了一个简单的任务,即以迭代方式计算Log2,如: public static int log2(int x) { int result = 0; while (x > 1) { x = x / 2; result++; } return result; } 现在我想把它转换成一个递归函数,但我认为我把它复杂化了 就这样结束了: public static int recLog2(int x) { if (x

我考虑了一个简单的任务,即以迭代方式计算Log2,如:

public static int log2(int x) {
    int result = 0;

    while (x > 1) {
        x = x / 2;
        result++;
    }

    return result;
}
现在我想把它转换成一个递归函数,但我认为我把它复杂化了

就这样结束了:

public static int recLog2(int x) {
    if (x < 1) {
        return x;
    } else {
        return recLog2(x/2);
    }

}

您忘记了在每个递归级别累积值。粗略的解决方案(我没有检查它是否存在一个接一个的错误)可能是:

if (x < 1) {
    return 0;
} else {
    return 1 + recLog2(x/2);
}
if(x<1){
返回0;
}否则{
返回1+重新登录2(x/2);
}

似乎是学习的例子,所以我把最后的解决方案留给你们。如果是出于实际目的,我建议使用基于Java方法的表达式
Integer.numberOfTrailingZeros(Integer.highestOneBit(x))
,这更简洁有效。

好吧,谢谢你的提示。最终的解决方案是这样的:if(x<1){return-1;}else{return1+recLog2(x/2);}
if (x < 1) {
    return 0;
} else {
    return 1 + recLog2(x/2);
}