/*---动态规划--斐波那契数列----
* 1. 如果用平常的递归会涉及很多的重复的计算:
* 如计算f(5)=f(4) + f(3),然后f(4)=f(3)+f(2);重复计算了f(3);
* 避免重复运算,用一数组保存已经计算过的值
* 2. 此方法叫记忆化搜索:将 O(2^n) 降到 O(n)
* 1. 如果用平常的递归会涉及很多的重复的计算:
* 如计算f(5)=f(4) + f(3),然后f(4)=f(3)+f(2);重复计算了f(3);
* 避免重复运算,用一数组保存已经计算过的值
* 2. 此方法叫记忆化搜索:将 O(2^n) 降到 O(n)
package com.xjj.algorithm;
import java.util.Scanner;
public class DP_fib {
public static int n;
//保存fib数组并初始化
public int[] dp = new int[n+1];
public int fib(int n){
if (n == 1 || n == 2) {
return 1;
}
//如果dp[i]已经计算并赋值
if (dp[n] != 0)
return dp[n];
return dp[n] = fib(n-1) + fib(n-2);
}
public static void main(String[] args) {
System.out.println();
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
DP_fib dp = new DP_fib();
System.out.println(dp.fib(n));
}
}