蓝桥杯递归算法

简介: 蓝桥杯中的递归算法涉及将问题分解为子问题,通过函数自身调用来求解。优点是简洁易懂,但效率低且可能引发栈溢出。示例包括:数组求和、数的阶乘、斐波那契数列及最大公约数计算,以及字符串翻转。代码展示了各种递归场景的Java实现,如`f3`计算数组和,`f`求阶乘,`f1`计算斐波那契数,`f2`找最大公约数,和`f1`字符串反转。

蓝桥杯递归算法

一、基本概念
递归算法是一种直接或者间接调用自身函数或者方法的算法。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);
    }
}
目录
相关文章
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-246 算法训练 猴子吃包子
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-246 算法训练 猴子吃包子
62 2
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-48 算法训练 关联矩阵
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-48 算法训练 关联矩阵
64 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-42 算法训练 送分啦
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-42 算法训练 送分啦
58 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-8 算法训练 操作格子 线段树
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-8 算法训练 操作格子 线段树
55 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-5 算法训练 最短路
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-5 算法训练 最短路
38 0
|
6月前
|
算法 Java Serverless
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
56 1
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
54 1
|
6月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-7 算法训练 逆序对 平衡二叉树
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-7 算法训练 逆序对 平衡二叉树
54 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-49 算法训练 寻找数组中最大值
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-49 算法训练 寻找数组中最大值
52 0
|
1月前
|
算法 测试技术 C++
【动态规划算法】蓝桥杯填充问题(C/C++)
【动态规划算法】蓝桥杯填充问题(C/C++)