题目
给定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;}