蓝桥杯递归算法

蓝桥杯递归算法

一、基本概念
递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。

二、递归算法的优点
1)递归就是方法里调用自身。
2)在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。
3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。
三、常见问题的递归解决

3.1、求数组的和

package demo;

public class 递归求数组纸和arr {
    
    
    public static void main(String[] args) {
    
    
       int arr=f3(new int[]{
    
    1,5,5,8,},0); //定义了一个新的数组new int[]
       System.out.println(arr);
    }
    static int  f3(int [] arr,int begin){
    
    
        if (begin==arr.length-1){
    
     //数组移动到最后一个元素时即数组的值为0时停止递归。
            return arr[begin];
        }
       return arr[begin]+f3(arr,begin+1);
    }
}

3.2、求一个数的阶乘

package demo;

public class 求一个数的阶乘 {
    
    
    public static void main(String[] args) {
    
    
       f1(1,10);
       f(2);
    }
    static int f(int i){
    
    
        if (i==1){
    
    
            return 1;
        }
      return i*f(i-1);
    }
    //打印1-10的数字采用递归的方法。
    //递归就是自己调用自己。其中static的函数为形参。方法中被调用的是实参。
    static void f1(int i, int j){
    
    
        if (i>j)//如果i大于就则就退出。防止出现死循环。
            return ;
        System.out.println(i);
        f1(i+1,j);
    }
}

3.3、斐波起啦数列和求最大公约数

package demo;

public class 斐波起啦数列 {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(f1(20));
        System.out.println(f2(9,2));
    }
    static int f1(int n){
    
    
        //找出口
        if (n==1||n==2)
            return 1;
        return f1(n-1)+f1(n-2);
    }
    //求最大公约数
    static int f2(int m,int n){
    
    
        if (m%n==0)
            return m;
        return f2(n,m%n);
    }
}

3.4、字符串的翻转

package demo;

public class 字符串的翻转 {
    
    
    public static void main(String[] args) {
    
    
      System.out.println(f1("abcd",3));
    }
    static String f1(String src,int end){
    
    
        if(end==0){
    
    
            return ""+src.charAt(0);
        }
        int i=src.charAt(end);
        System.out.println(i);
        return src.charAt(end)+f1(src,end-1);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_48164590/article/details/121436691