快速幂运算

题:求一个数 data 的 n 次幂,要求时间复杂度为log(n)java

1:递归算法:算法

/**
     * x^3=(x^2)*x;x^7=(x^3)^2 * x
     *
     * 递归算法
     * @param data 底数
     * @param n 次幂数
     * @return
     */
    private static int recursion(int data, int n) {
        if (n == 0) {
            return 1;
        }
        if (n == 1) {
            return data;
        }
        if (n % 2 == 0) {
            return recursion(data * data, n/2);
        } else {
            return recursion(data * data, n/2) * data;
        }
    }

2:非递归code

/**
     * 非递归(当乘以的次数大于n的一半的的时候,剩余的data的个数要一个一个乘)
     * @param data  底数
     * @param n 次幂数
     * @return
     */
    private static int noRecursion(int data, int n) {
        int result = data;
        for (int i=1; i<n;) {
            if (i < n/2) {
                result *= result;
                i = i*2;
            } else {
                result = result * data;
                i = i + 1;
            }
        }
        return result;
    }
相关文章
相关标签/搜索