大家好我明天有算法分析考试,我在网上发现了这个问题。我试图解决它但我只需要你检查我的解决方案是否正确
public class t {
public static void main(String[] args) {
System.out.println(mystery(7, 6));
}
public static int mystery(int a, int b) {
if (b == 0) return 0;
return mystery(a * 2, b / 2) + a;
}
}
我的回答: 该算法具有O(logn)的复杂度 因为每次b被加倍一半直到我们到达 终止条件为1。
答案 0 :(得分:4)
O(log n)错误,因为没有" n"定义
虽然我知道你的意思是复杂性是O(log b),这是正确的,你必须引用正确的变量。否则,假设O(log n)表示O(log a),这将是非常不正确的。
此外,停止条件是b = 0。