数据结构与算法-递归1

递归是计算机编程中的一个概念,它指的是在解决问题时将问题分解为更小的子问题,并通过重复这个过程来解决问题。递归通常使用函数作为其实现方式,这个函数可以调用自身来解决问题。在编程中,递归被广泛应用于解决方案的搜索、排序、查找、分组和聚合等问题。

递归算法的基本思想是将问题分解为更小的子问题,直到子问题的规模足够小,可以直接解决,然后再将子问题的解组合起来得到原问题的解。这个过程可以不断重复,直到问题得到完全解决。

递归算法的优点是可以简化问题的求解过程,避免了循环等繁琐的操作。但是,递归算法也有一些缺点,例如可能导致堆栈溢出等问题,因此需要谨慎使用。

在实际编程中,递归算法通常被用于解决那些可以被分解为更小的子问题的问题。例如,在计算阶乘时,递归函数是一个常用的工具。

递归阶乘

public class _01Factorial {

    public static int f(int n) {
        if(n == 1) {
            return 1;
        }
        return n * f(n - 1);
    }

    public static void main(String[] args) {

        System.out.println(f(3)); // 结果 6

        // 拆解递归过程代码
        // 逐级向内递,递到最内层,逐级往回归
        /*f(int n = 3){ //递
            return 3 * f( n =2 ) { //递
                return 2 * f( n = 1 ){ //递
                    if(n == 1) {
                        return 1;
                    }
                }
            }
        }*/
    }

}

递归反向打印字符串

public class _02ReversePrintString {

    public static void f(int n, String str) {
        if( n == str.length() ) {
            return;
        }
        f( n + 1, str);
        System.out.println(str.charAt(n));
    }

    public static void main(String[] args) {
        String s = "abcdefghijk";
        f(0, s);
    }

}

递归二分查找

public class _03BinarySearchDemo {

    public static int search(int[] a, int target){
        return f(a, target, 0, a.length - 1);
    }

    private static int f(int[] a, int target, int i, int j) {
        if(i > j) {
            return -1 ;
        }
        int m = (i + j) >>> 1 ;
        if(target < a[m]) {
            return f(a, target, i, m - 1);
        }else if(a[m] < target) {
            return f(a, target, m + 1, j);
        }else {
            return m ;
        }
    }

    public static void main(String[] args) {

        int[] arr = {1,2,4,6,8,10,12} ;
        System.out.println(search(arr, 8));

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值