• 递归----基础训练


    递归的一些基础使用我都写在代码注释了,直接上代码吧。。。

    public class Test {
    
        public static void main(String[] args) {
            
        }
        
        /**
         * 递归写法
         * @param i
         */
        static void f(int i){
            f(i-1);
        }
        
        /**
         * 递归两种解法:1、找到一种划分方法  2、递推公式 等价转换
         * f(n)求n的阶乘  ---> f(n-1) 求n-1的阶乘
         * 找重复  n*(n-1)的阶乘  求n-1的阶乘是原问题的重复(规模重复) ---子问题
         * 找变化:变化的量应该作为参数
         * 找边界:出口
         * @param i
         */
        static int f1(int n){
            if (n==1) {
                return 1;
            }
            return n*f1(n-1);
        }
        
        /**
         * 打印i到j
         */
        static void f2(int i,int j){
            if (i>j) {
                return ;
            }
            System.out.println(i);
            f2(i+1, j);
        }
        
        /**
         * 数组求和
         * 难点就是加参数 
         * @param arr
         * @param begin
         * @return
         */
        static int f3(int []arr,int begin){
            if (begin==arr.length-1) {
                return arr[begin];
            }
            return arr[begin]+f3(arr, begin+1);
        }
        
        /**
         * 难点就是加参数 
         * 翻转字符串
         */
        static String reverse(String src,int end){
            if (end == 0) {
                return ""+src.charAt(0);
            }
            return src.charAt(end)+reverse(src,end-1);
        }
        
        /**
         * 多分支递归  斐波那契数列
         * 递归分解为:直接量+小规模子问题  或者 多个小规模子问题
         *  递归基本都可以写出递推公式
         *  递归本质:递推公式
         */
        static int fib(int n){
            if (n==1 || n==2) {
                return 1;
            }
            return fib(n-1)+fib(n-2);
        }
        
        /**
         * 巧用递推公式解最大公约数
         * 递推公式 等价转换
         */
        static int gcd(int m,int n){
            if (n==0) {
                return m;
            }
            return gcd(n, m%n);
        }
        
        /**
         * 别有洞天:递归形式进行插入排序
         */
        static void insertSort(int []arr,int k){
            
            if (k==0) {
                return ;
            }
            
            // 划分两个部分  第一个部分 对前k-1个元素排序
            insertSort(arr, k-1);
            
            // 第二个部分  把位置k的元素插入到前面的部分
            int x = arr[k];
            int index = k - 1;
            while(index>-1&&x<arr[index]){
                arr[index+1] = arr[index];
                index--;
            }
            arr[index+1] = x;
        }    
        
    }
  • 相关阅读:
    gitlab修改root管理员密码
    【树形 DP】AcWing 325. 计算机
    【图论】AcWing 369. 北大ACM队的远足(DAG 必须边 + 双指针)
    【数据结构】子序列自动机
    前端登录,这一篇就够了(Cookie, Session, Token)
    如何实现一个让面试官惊艳的深克隆
    数据分析前端正则🚀TOP10, 必用⭐正则(77条)
    阿里云ECS安装Archlinux
    golang 哪些类型可以作为map key
    Oracle DG hw重启操作
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/10257656.html
Copyright © 2020-2023  润新知