Java - 位操作的大 O?

标签 java recursion big-o

这段代码的大 O 是什么? 我知道所有行都是 O(1),除了递归部分。我不确定递归的大 O 是什么,我感觉它仍然是 O(1),因为我们没有比 O(1) 更差的行,但通常递归是 O(n)。

代码:

public int getSum(int a, int b) {

        if (b == 0){
            return a;
        }

        if (a == 0){
            return b;
        }

        int add = a ^ b;
        int carry = (a&b) << 1;

        return getSum(add, carry);
    }

编辑:顺便说一句,这不是家庭作业,是为面试做准备。

最佳答案

这个函数其实就是O(n)最坏的情况下。正如上面评论中所讨论的,大 O 表示法 引用函数的渐近上界。在最坏的情况下,此函数的上限是您输入的每个数字都是 max int .这意味着该函数被调用的次数等于整数中的位数。如果您的整数有 32 bits ,然后函数运行 32 次,每次执行一系列常量操作。这使得函数 O(n) , 其中n是整数的大小

关于Java - 位操作的大 O?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44468016/

相关文章:

arrays - 在线性空间中存储成对和

algorithm - 我对确定解决此任务的最佳排序算法的分析是否正确?

java - setBoldweight 不起作用

java http get "request reject"但在浏览器中工作

javascript - 当异步递归方法完全准备好时如何创建回调

c - 仅使用递归如何实现 O(log n) 幂函数 a^n ?

java - 如何在Android Vision API中设置全屏?

java - RxJava2 : Need help to convert java code into rx

c - 在 C 中打印 0 到 1,000,000 之间的素数

algorithm - 嵌套几何序列的复杂性