快速冪運算

題:求一個數 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;
    }
相關文章
相關標籤/搜索