• 递归


    递归   基本思想:自己调用自己

    递归结构包括两个部分:1.定义递归头 即什么时候不调用自身方法    如果没有头,将进入死循环,也就是递归的结束条件

    2.递归体  即什么时候需要调用自身方法

    练习1:

     /**
    * 用递归解决下面描述的问题:
    * 有三种面值的硬币,分别是1分,2分,5分,
    * 现在给出一个价值,例如价值11,问组成该价值最少需要的硬币数量是多少???
    * 11 = 1 10
    * 11 = 2 9
    * 11 = 5 6
    */

    public class Coin {
        public static int lessCoin(int i){
            if(i==1||i==2||i==5){  //如果是一角、两角、五角的直接返回一个数量
                return 1;
            }else if(i<5){   //3角和4角都返回2个数量
                return 2;
            }else{
                return  Math.min(1+lessCoin(i-1),Math.min(1+lessCoin(i-2), 1+lessCoin(i-5)));  //若大于5,则应该返回三个中的最小数量
            }
        }
    
        public static void main(String[] args) {
            System.out.println(lessCoin(12));
            System.out.println(lessCoin(13));
        }
    }

    练习2:汉诺塔

    private static void hanoi(int i, char a, char b, char c) {
            if(i==1){
                System.out.println(a+"->"+c);
            }else{
                hanoi(i-1, a, c, b);
                System.out.println(a + "->" + c);
                hanoi(i-1, b, a, c);
            }
        }

    递归的分析:

     

     练习3:

    /**
    * 用递归判断一个数组是否是递增序列的数组
    * 思路:依次判断,从第一个开始,判断下一个是否大于当前的值
    */
    
    
    int[] arr=new int[5];
    Random rd=new Random();
    for (int i = 0; i < arr.length; i++) {
    arr[i]=rd.nextInt(10);
    }
    System.out.println(Arrays.toString(arr));
    System.out.println(fun2(arr));

    public static boolean fun2(int[] arr) { return fun2(arr,0); } public static boolean fun2(int arr[],int i){ if(i==arr.length-1){ return true; } if(arr[i]>arr[i+1]){ return false; } return fun2(arr,i+1); }

     

  • 相关阅读:
    20190905-3 命令行和控制台编程
    作业要求 20181009-9 每周例行报告
    每周例行报告
    单元测试,结对
    四则运算试题生成
    代码规范,结对要求
    规格说明书-吉林市2日游
    功能测试
    每周例行报告2
    get与post请求的区别
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/11642499.html
Copyright © 2020-2023  润新知