递归算法

àì夳堔傛蜴生んèń 2022-05-17 06:34 430阅读 0赞

今年上半年开展新项目, 每天都很忙

但也很充实, 学到了很多东西, 比如如何处理50M以上的Excel, 批量处理10W+的数据,新的设计模式等。。。

本次分享的是一个小技巧-递归算法。大家做java多年,都知道每天都会有很多if else. 在需求允许情况下,采用递归提升代码质量和简洁,也是一种有效方法

总结Demo如下

  1. package digui;
  2. /***
  3. * 1.递归的边界条件 2.递归通式
  4. * 递归:是一种方法调用自己的编程技术
  5. * @author Lisa-Luo
  6. *
  7. */
  8. public class digui1 {
  9. public static void main(String[] args) {
  10. test2(10);
  11. }
  12. public static void test() {
  13. System.out.println("Hello,World!");
  14. test();
  15. }
  16. public static void test2(int n) {
  17. if(n == 0) {
  18. return;
  19. }
  20. System.out.println(n);
  21. test2(n - 1);
  22. }
  23. }
  24. package digui;
  25. /**
  26. * 该数列中的第N项是由N-1加上N得到的
  27. * @author Lisa-Luo
  28. *
  29. */
  30. public class digui2 {
  31. // 普通算法
  32. public static int getNumber(int n) {
  33. int total = 0;
  34. while (n > 0) {
  35. total = total + n;
  36. n--;
  37. }
  38. return total;
  39. }
  40. // 递归算法
  41. public static int getNumberByRecursion(int n) {
  42. if (n == 1) {
  43. return 1;
  44. } else {
  45. return n + getNumberByRecursion(n - 1);
  46. }
  47. }
  48. public static void main(String[] args) {
  49. System.out.println(digui2.getNumber(5));
  50. System.out.println(digui2.getNumberByRecursion(5));
  51. }
  52. }
  53. package digui;
  54. /**
  55. * Fibonacci数列
  56. * 该数列的第1项为0,第二项为1,第N项为第n-1项加上n-2项
  57. * @author Lisa-Luo
  58. *
  59. */
  60. public class digui3 {
  61. public static int getNumber(int n) {
  62. //从第三项开始才可能存在前两项
  63. if(n == 1) {
  64. return 0;
  65. } else if(n == 2){
  66. return 1;
  67. } else {
  68. return getNumber(n - 1) + getNumber(n - 2);
  69. }
  70. }
  71. public static void main(String[] args) {
  72. System.out.println(digui3.getNumber(5));
  73. }
  74. }
  75. package digui;
  76. public class digui4{
  77. //阶乘
  78. public static int getFactorialNum(int n) {
  79. if (n == 1 || n ==0) {
  80. return 1;
  81. } else {
  82. return n * getFactorialNum(n - 1);
  83. }
  84. }
  85. public static void main(String[] args) {
  86. System.out.println(digui4.getFactorialNum(5));
  87. }
  88. }
  89. package digui;
  90. public class digui5 {
  91. /**
  92. * 斐波那契数列的实现 0,1,1,2,3,5,8,13,21......
  93. *
  94. * @param day
  95. */
  96. public long fibonacci(int day) {
  97. if (day == 0) { // F(0)=0
  98. return 0;
  99. } else if (day == 1 || day == 2) {// F(1)=1
  100. return 1;
  101. } else {
  102. return fibonacci(day - 1) + fibonacci(day - 2); // F(n)=F(n-1)+F(n-2)
  103. }
  104. }
  105. /**
  106. * 更为简洁的写法
  107. *
  108. * @param day
  109. * @return
  110. */
  111. public long fib(int day) {
  112. return day == 0 ? 0 : (day == 1 || day == 2 ? 1 : fib(day - 1)+ fib(day - 2));
  113. }
  114. // 测试
  115. public static void main(String[] args) {
  116. digui5 fibonacci = new digui5();
  117. System.out.println("第11天动物数量为:" + fibonacci.fib(11));
  118. System.out.println("第11天动物数量为:" + fibonacci.fibonacci(11));
  119. }
  120. }

发表评论

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

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

相关阅读

    相关 算法-算法

    1、定义:函数(方法)直接或间接调用自身。 必须要有一个明确的结束递归的条件 > 递归的退出条件:思考临界值-`拿到参数对它的范围进行判断`

    相关 算法

    递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归函数(或过程)来表示问题的解。 一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(

    相关 算法

    今年上半年开展新项目, 每天都很忙 但也很充实, 学到了很多东西, 比如如何处理50M以上的Excel, 批量处理10W+的数据,新的设计模式等。。。 本次分享的是一个小技

    相关 算法

    定义:简单来说,递归算法就是直接或者间接调用自身的函数。把一个大型的复杂问题层层转换为一个与原问题相似的小规模的问题来求解。 例子:一列数的规则如下: 1、1、2、3、5、8

    相关 算法

    介绍 定义 我们先看一下百度百科上面的定义: 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用 自身的一种

    相关 算法

    递归原理 递归是一种解决问题的有效方法,在递归过程中,函数将调用自己 为了确保递归函数不会导致无限循环,它应具有以下属性: 一个简单的基本案例, 能够不使用递归来产

    相关 算法--

    递归: 注意两点: 1.边界条件时( 有时有return,有时是别的操作)代码里用橘红色标出 2.递归时参数变化(规模变小) 代码里用黄色标出  递归:你

    相关 算法---

    1、什么是递归? “要理解递归,就得先了解什么是递归”,实际上这句话就是一个递归。哈哈,是不是把大家说蒙了,没关系,接下来举个从小就听 过的例子:从前有座山,山里有座庙,