java 动态规划(斐波那契数列)

悠悠 2022-11-21 11:19 328阅读 0赞

java 动态规划(斐波那契数列)

*********************

斐波那契数列

  1. f(0)=0,
  2. f(1)=1,
  3. f(n)=f(n-1)+f(n-2), n>=2n为自然数

递归:时间复杂度为指数级别o(2^n)

递归+缓存:斐波那契数列有重复计算,使用缓存可降低时间复杂度到线性级别o(n)

动态规划:时间复杂度为o(n)

*********************

示例

  1. public class MyTest3 {
  2. private static final Map<Integer,Integer> map=new HashMap<>();
  3. public static int fun(int n){
  4. if (n==0){
  5. return 0;
  6. }
  7. if (n==1){
  8. return 1;
  9. }
  10. return fun(n-1)+fun(n-2);
  11. }
  12. public static int fun2(int n){
  13. if (map.get(n)!=null){
  14. return map.get(n);
  15. }
  16. if (n==0){
  17. return 0;
  18. }
  19. if (n==1){
  20. return 1;
  21. }
  22. int result=fun(n-1)+fun(n-2);
  23. map.put(n,result);
  24. return result;
  25. }
  26. public static int fun3(int n){
  27. int[] a=new int[n+1];
  28. a[0]=0;
  29. a[1]=1;
  30. for (int i=2;i<=n;i++){
  31. a[i]=a[i-1]+a[i-2];
  32. }
  33. return a[n];
  34. }
  35. public static void main(String[] args){
  36. System.out.println("递归求解:fun(40)="+fun(40));
  37. System.out.println("递归缓存求解:fun(40)="+fun2(40));
  38. System.out.println("动态规划求解:fun3(40)="+fun3(40));
  39. }
  40. }

控制台输出

  1. 递归求解:fun(40)=102334155
  2. 递归缓存求解:fun(40)=102334155
  3. 动态规划求解:fun3(40)=102334155

发表评论

表情:
评论列表 (有 0 条评论,328人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数列

    关于斐波那契数列的解法,本人找到了一种比较简单的方法,结果是正确的,不知道各位有没有另外更好的解法,一起探讨探讨。 import java.util.; pu