算法的一些小栗子6(递归算法)

来源:互联网 发布:侠客风云传前传优化 编辑:程序博客网 时间:2024/05/21 14:57

二分查找

//二分查找public class BinarySearch {    //采用递归    public int search(int elem, int[] a, int low, int high) {        if (low > high) {            return -1;        }        int middle = (low + high) / 2;        if (a[middle] == elem) {            System.out.println("使用递归二分查找找到元素" + a[middle] + "下标为" + middle);            return middle;        }        if (a[middle] < elem) {            return search(elem, a, middle + 1, high);        }        if (a[middle] > elem) {            return search(elem, a, low, middle - 1);        }        return -1;    }    //不采用递归    public int search2(int elem, int[] a) {        int low = 0;        int high = a.length;        while (low <= high) {            int middle = (low + high) / 2;            if (elem > a[middle]) {                low = middle + 1;            }            if (elem < a[middle]) {                high = middle - 1;            }            if (elem == a[middle]) {                System.out.println(a[middle]);                System.out.println("使用非递归二分查找找到元素" + a[middle] + "下标为" + middle);                return middle;            }        }        return -1;    }    public static void main(String[] args) {        int[] a = {3, 5, 2, 34, 24, 33, 19, 55, 64, 42};        Arrays.sort(a);        for (int i = 0; i < a.length; i++) {            System.out.print(a[i] + " ");        }        System.out.println();        BinarySearch binarySearch = new BinarySearch();        binarySearch.search(33, a, 0, a.length);        binarySearch.search2(34, a);    }}

汉诺塔

//汉诺塔递归public class HanNota {    private int i = 1;    public void hanNota(int n, char from, char dependOn, char to) {        if (n == 1) {            move(1, from, to);        } else {            hanNota(n - 1, from, to, dependOn);            move(n, from, to);            hanNota(n - 1, dependOn, from, to);        }    }    private void move(int n, char from, char to) {        System.out.println("第" + i++ + "步从" + from + "------->" + to);    }    public static void main(String[] args) {        HanNota hanNota = new HanNota();        hanNota.hanNota(70, 'A', 'B', 'C');    }}


欧几里得求最大公约数

//欧几里得求最大公约数public class Gcd {    public int gcd(int m, int n) {        if (n == 0) {            return m;        } else {            return gcd(n, m % n);        }    }    public static void main(String[] args) {        Gcd gcd = new Gcd();        int x = gcd.gcd(36, 24);        System.out.println("最大公约数为:" + x);    }}


原创粉丝点击