Question 1 Power Function

SC& TC: O(n), O(1)

public int power(int a, int b) {
    // step 1 function, input a, b, output a^b
    // step 2 base case
    if (b == 0) {
        return 1;
    }
    // step 3 subproblem
    int ret = power(a, b -1);
    // step 4 recursive rule
    return a * ret;
}


public int power(int a, int b) {
    // step 1 function, input a, b, output a^b
    // step 2 base case
    //if (b == 0 || a == 1) {
    //    return 1;
    //}
    //if (b == 1 || a == 0) {
    //    return a;
    //}
    if (b == 0) {
        return 1;
    }
    ret = power(a, b /2);
    // step 3 subproblem
    if (b % 2 == 0) {
        return ret * ret;
    }
    return ret * ret * b;
    // step 4 recursive rule
}

如果有负数?


public int power(int a, int b) {
    // step 1 function, input a, b, output a^b
    // step 2 base case
    //if (b == 0 || a == 1) {
    //    return 1;
    //}
    //if (b == 1 || a == 0) {
    //    return a;
    //}
    if (b == 0) {
        return 1;
    }
    if (b < 0) {
        return 1/poer(a, -(b + 1) * a);
    }
    ret = power(a, b /2);
    // step 3 subproblem
    if (b % 2 == 0) {
        return ret * ret;
    }
    return ret * ret * b;
    // step 4 recursive rule
}

如果我要算a的b次方,b一定可以表示成为log2(n) +1 个二进制位

  • 13 = 1 * 2^3 + 1 * 2^2 + 0^ 2^0 +

  • a^n = a^(n的二次方表达)

Last updated