确实花钱订阅了一下数据结构与算法的专栏,这里没有把专栏里面的内容写到博客上,我很注重人家的劳动成果的,所以我只把我写的,或者是网上找的一些算法的实例在这里贴出来,方便自己以后的学习,以及对自己的对一些比较常见的算法的理解有所帮助!

  在公司的时候,空闲的时间写的递归算法的一些实例,我也测试过了,可以运行的!

  1. 1   /***
  2. 2 * 递归求和 1+2+3+...+n
  3. 3 * @param n 输入的数值
  4. 4 * @return
  5. 5 */
  6. 6 public static int recursionSum(int n){
  7. 7
  8. 8 if(n>0){
  9. 9 return n + recursionSum(n);
  10. 10 }else{
  11. 11 return 0;
  12. 12 }
  13. 13 }
  14. 14
  15. 15 /***
  16. 16 * 递归阶乘 n! = n*(n-1)*(n-2)*...*1
  17. 17 * @param n 需要求取阶乘的数值
  18. 18 * @return
  19. 19 */
  20. 20 public static int recursionMulity(int n){
  21. 21
  22. 22 if(n == 1){
  23. 23 return 1;
  24. 24 }
  25. 25 return n * recursionMulity(n-1);
  26. 26 }
  27. 27
  28. 28 /***
  29. 29 * 题意:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。
  30. 30 * 这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
  31. 31 *
  32. 32 * 分析:第七天后该人只有2只鸭子,记每天的鸭子数量为num,则之前每天的鸭子总数为当天后一天的(num+1)*2只,当天卖掉的鸭子个数为(num/2)+1只
  33. 33 *
  34. 34 * 算法步骤:
  35. 35 * 1) 令num等于2,n等于7;
  36. 36      * 2) 计算前一天的总鸭子数量num = (num + 1) * 2;
  37. 37      * 3) 计算并输出第n天卖掉的鸭子数量;
  38. 38      * 4) 将n减去1,判断n是否大于0,若是,则输出总鸭子数量num,否则,递归调用函数继续进行计算。
  39. 39 *
  40. 40 * @param num 最后一天剩余的鸭子的数量
  41. 41 * @param counter 村庄的个数
  42. 42 * @return 计算出的sum的和
  43. 43 */
  44. 44 public static int duck_sale(int num, int counter){
  45. 45
  46. 46 num = (num + 1) * 2;
  47. 47 System.out.println("第"+counter+"个村子卖出的鸭子的数量是:>>>>>>"+(num/2-1));
  48. 48 //计数器减1
  49. 49 counter--;
  50. 50
  51. 51 if(counter > 0){
  52. 52 //说明前面鸭子没卖完 递归调用方法 算出该村子卖出的鸭子的数量
  53. 53 duck_sale(num,counter);
  54. 54 }else{
  55. 55 //说明鸭子卖完了
  56. 56 System.out.println("鸭子的总数是:>>>>>>"+num);
  57. 57 }
  58. 58 return num;
  59. 59 }
  60. 60 /***
  61. 61 * 角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。
  62. 62 * 求经过多少次可得到自然数1。
  63. 63 * 如:输入22,
  64. 64 * 输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
  65. 65 * STEP=16
  66. 66 *
  67. 67 * 算法步骤:
  68. 68 * 1)定义计数器counter=0 输入自然数的值
  69. 69 * 2)判断n 是否为偶数,若是,则n=n/2 若不是,则n=n*3+1
  70. 70 * 3)判断n是否等于1 若是,则输出counter,若不是继续 调用jiaogu()
  71. 71 *
  72. 72 * @param n 输入的自然数 所要求的数值
  73. 73 * @return 输出最后结果所需要的调用几次
  74. 74 */
  75. 75 public static int jiaogu(int n, int counter){
  76. 76
  77. 77 //这个计数器不可以在这里赋值的,这样每一次调用方法进来之后,都会重置counter的值
  78. 78 //int counter = 1;
  79. 79
  80. 80 if(n == 1){
  81. 81 System.out.println("Step is >>>>>>"+counter);
  82. 82 }else{
  83. 83 //计数器+1
  84. 84 counter++;
  85. 85 if(n % 2 == 0){
  86. 86 n = n / 2;
  87. 87 }else{
  88. 88 n = n * 3 + 1;
  89. 89 }
  90. 90
  91. 91 System.out.println("输出当前自然数的值是:>>>>>>"+n);
  92. 92 //递归调用
  93. 93 jiaogu(n,counter);
  94. 94 }
  95. 95 return counter;
  96. 96 }

 

版权声明:本文为ssh-html原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ssh-html/p/9735154.html