Topic: 递归+DP
题目:给定一个数字,求出该数字位置的Fibonacci数值。
方法:
1. 纯递归
2. DP
3. 递归+DP
Code:
class Test{
public static void main(String[] args){
int n = 5;
int[] dp = new int[n+1];
Fibo f = new Fibo();
System.out.println(f.fibo1(n));
System.out.println(f.fibo2(dp, n));
System.out.println(f.fibo3(dp, n));
}
}
class Fibo{
public int fibo1(int n){
if(n == 0 || n == 1) return 1;
return fibo1(n-1)+fibo1(n-2);
}
public int fibo2(int[] dp, int n){
dp[0] = 1;
dp[1] = 1;
for(int i=2; i<=n; i++)
dp[i] = dp[i-1]+dp[i-2];
return dp[n];
}
public int fibo3(int[] dp, int n){
if(n==0 || n==1) return 1;
if(dp[n] != 0) return dp[n];
for(int i=2; i<=n; i++)
dp[i] = fibo3(dp, i-1)+fibo3(dp, i-2);
return dp[n];
}
}
小结:
三个fibo方法,从一到三,分别是纯递归,纯DP,递归加DP。
在这里dp数组记录的是已经便利过的Fibonacci数值。