蓝桥算法,每天一道(二)

蓝桥算法,每天一道(二)

二、查找与排序

目标:

①对递归建立起感觉

②学会评估算法性能

③大致预估程序执行时间

1、递归

递归——自己调用自己,先来个最简单例子

public class Recursive {
    public static void main(String[] args) {
        f(10);
    }
    
    //千万注意不要死循环
    static void f(int i) {
        if(i==0)
        return;
        //调用自身
        f(i-1);
    }
}

然后先来一些简单案例

牢记在心三步骤:
① 找重复:对原问题的重复,规模更小——子问题
② 找变化:变化的量应该作为参数,适当时要自行添加参数
③ 找边界:出口,就是条件,不能死循环下去

求阶乘

/*
 *求n的阶乘
 *找重复:n*(n-1),n-1的阶乘是对原问题的重复,只是规模更小——子问题
 *找变化:变化的量应该作为参数 n
 *找边界:出口,就是条件,不能死循环下去
 */
public class JieCheng {
    public static void main(String[] args) {
        System.out.println(func(10));
    }

    public static int func(int n) {
        //写终止条件
        if (n==1)
            return 1;
        return n*func(n-1);
    }
}

打印i-j

/*
 *打印i-j
 * 找重复:i不断增加靠向j--->i+1
 * 找变化:i不断增加
 * 找出口:终止条件--->i>j则停止
 */
public class Print {
    public static void main(String[] args) {
        func(1,10);
    }

    public static void func(int i,int j) {
        if (i>j)
            return;
        System.out.print(i+" ");
        func(i+1,j);
    }
}

对arr所有元素求和

/*
 * 对arr所有元素求和
 * 重复:数组里我们要开始的那块,假设为begin
 * 变化:数组长度、起点在变化,所以必须要加参数就是begin
 * 出口:当begin==arr.length-1
 */
public class ShuZu {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        //从索引0处开始求和
        System.out.println(fun(arr,0));
    }

    public static int fun(int[] arr, int begin) {
        if (begin==arr.length-1) {
            return arr[begin];
        }
        return arr[begin]+fun(arr,begin+1);
    }
}

反转

/*
 * 反转
 * 重复:[a,b,c,d]-->d reverse[a,b,c]-->c reverse[a,b]-->b reverse[a]-->[d,c,b,a]
 *       这一反转过程就在不断重复
 * 变化:应该是最后的那个数字,我们设置其索引为end
 * 出口:本例中end为3,当其反转成为0时,结束即可
 */
public class Reverse {
    public static void main(String[] args) {
        System.out.println(fun("abcd",3));
    }

    public static String fun(String src,int end) {
        if (end==0) {
            return ""+src.charAt(0);
        }
        return src.charAt(end)+fun(src,end-1);
    }
}

总结:在重复中找变化,在变化中找重复。

猜你喜欢

转载自www.cnblogs.com/wangzheming35/p/11951586.html