zoukankan      html  css  js  c++  java
  • 递归算法的一些简单的实例

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

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

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