【算法】斐波那契數列第n位 - 去重遞歸/雙指針迭代

題目

給定n,求斐波那契數列第n位的數值。

斐波那契數列:0 1 1 2 3 5 8 13 ……
每個數等于前面兩個數相加,第n位等于第(n - 1)位加上第(n - 2)位。

原理

去重遞歸

使用遞歸的方式計算出結果,但使用一個數組保存已經計算出來的值,防止重復計算,提高性能。

雙指針迭代

定義一個指針 low = 0,和一個指針 high = 1,每次迭代將 low + high 賦值給 high,將原來的 high 賦值給 low,從2開始遍歷到n即得出結果。

代碼

去重遞歸

    public static void main(String[] args) {
        System.out.println(fibonacciByRecursion(10));
    }

    private static int fibonacciByRecursion(int n) {
        int[] fibonacciArr = new int[n + 1];
        return recursion(n, fibonacciArr);
    }

    private static int recursion(int n, int[] fibonacciArr) {
        if (n == 0 || n == 1) {
            return n;
        }
        if (fibonacciArr[n] != 0) {
            return fibonacciArr[n];
        }
        return recursion(n - 1, fibonacciArr) + recursion(n - 2, fibonacciArr);
    }

雙指針迭代

    public static void main(String[] args) {
        System.out.println(fibonacciByTwoPointer(10));
    }

    private static int fibonacciByTwoPointer(int n) {
        if (n == 0 || n == 1) {
            return n;
        }
        int low = 0, high = 1;
        for (int i = 2; i <= n; i++) {
            int sum = low + high;
            low = high;
            high = sum;
        }
        return high;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容