当前位置:   article > 正文

递归的剪枝逻辑_fib递归算法map

fib递归算法map

1.计算数n的斐波那契数列(应用到剪枝逻辑)

0,1,1,2,3,5,8.........

剪枝逻辑:应用到map集合,将每次求出的fib值都存储在map集合中,在递归需要使用到当前fib值时,先判断若map集合中有的话,直接在map集合中取,不必再计算一次当前fib,若没有则再计算fib同时存入map集合。

  1. public class Num10_斐波那契数列 {
  2. //3.递归——应用到剪枝逻辑!!!(map集合存储每一次的fib值)
  3. private Map<Integer, Integer> filter = new HashMap<>();//filter:过滤
  4. public int Fibonacci(int n) {
  5. if(n==0||n==1){
  6. return n;
  7. }
  8. if(n==2){
  9. return 1;
  10. }
  11. int ppre=0;//n-2的斐波那契数
  12. if(filter.containsKey(n-2)){
  13. ppre=filter.get(n-2);
  14. }else {
  15. //没找到
  16. ppre=Fibonacci(n-2);
  17. filter.put(n-2,ppre);
  18. }
  19. int pre=0;//n-1的斐波那契数
  20. if(filter.containsKey(n-1)){
  21. pre=filter.get(n-1);
  22. }else {
  23. //没找到
  24. pre=Fibonacci(n-1);
  25. filter.put(n-1,pre);
  26. }
  27. return ppre+pre;
  28. }
  29. // //2.递归版本
  30. // public int Fibonacci(int n) {
  31. // if(n==0){
  32. // return 0;
  33. // }
  34. // if(n<=2){
  35. // return 1;
  36. // }
  37. // return Fibonacci(n-1)+Fibonacci(n-2);
  38. // }
  39. // //1.迭代版本
  40. // public int Fibonacci(int n) {
  41. // if(n==0){
  42. // return n;
  43. // }
  44. // int first=1;
  45. // int second=1;
  46. // int third=1;//n=1或2时直接返回1
  47. // while(n>2){
  48. // third=first+second;
  49. // first=second;
  50. // second=third;
  51. // n--;
  52. // }
  53. // return third;
  54. // }
  55. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/434294
推荐阅读
相关标签
  

闽ICP备14008679号