斐波那契数列的求值,只要有三种方法:
暴力递归、去重递归、双指针迭代
/**
* 斐波那契数列: 0,1,1,2,3,5,8,13,21,34,55
*/
public class FibonacciSequenceTest {
public static void main(String[] args) {
System.out.println("暴力递归:" + byViolentRecursion(10));
System.out.println("去重递归:" + byDeDuplicationRecursion(10));
System.out.println("双指针迭代:" + byDoublePointerIteration(10));
}
// 暴力递归
public static int byViolentRecursion(int n){
if(n==1 || n==0){
return n;
}
return byViolentRecursion(n-1)+byViolentRecursion(n-2);
}
// 去重递归
public static int byDeDuplicationRecursion(int n){
int[] dataArr = new int[n+1];
return byDeDuplicationRecursion(dataArr,n);
}
public static int byDeDuplicationRecursion(int[] dataArr, int n){
if(n==1 || n==0){
return n;
}
if(dataArr[n]!=0){
return dataArr[n];
}
dataArr[n] = byDeDuplicationRecursion(n-1)+byDeDuplicationRecursion(n-2);
return dataArr[n];
}
// 双指针迭代
public static int byDoublePointerIteration(int n){
if(n==1 || n==0){
return n;
}
int low=0,high=1,temp;
for(int i=2;i<=n;i++){
temp = high;
high = low+high;
low = temp;
}
return high;
}
}