蓝桥杯递归算法

蓝桥杯递归算法

一、基本概念
递归算法是一种直接或者间接调用自身函数或者方法的算法。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);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code袁

你的支持是我莫大的幸运

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值