当前位置: 首页 > article >正文

【Java】递归算法

递归的本质:

        方法调用自身。

案例1. 斐波那契数列

1 1 2 3 5 8 13 21 ..

f(n)=f(n-1)+f(n-2)

方法的返回值:

        只要涉及到加减乘除,就是int,其他的就是void。

案例2.  青蛙跳台 

        青蛙一次可以跳一级台阶,也可以跳两级台阶,那么青蛙跳到n级台阶有多少种方法?

思路:

        1. 如果只有一级台阶,青蛙有一种跳法。

        2. 如果有两级台阶,青蛙有两种跳法(一级一级跳或者一次跳两个)。

        3. 如果跳到n级,那么他可能是从n-1级跳上来的,也可能是n-2级跳上来的。

 

public static int fun(int n){
    if(n==1){
        return 1;
    }
    if(n==2){
        return 2;
    }
    return fun(n-1)+fun(n-2);
}

案例3. 计算数组前n项和

思路:

        前n项和  就是  前n-1项  和加 上  第n项数

        f(n)=f(n-1)+arr[n-1]

 

public static int fun(int n,int[] arr){
    if(n==1){
        return arr[0];
    }
    return fun(n-1)+arr[n-1];
}

案例4. 二分查找

704. 二分查找 - 力扣(LeetCode)

        给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

 思路:

        目标值与中间值作对比,

        比中间值小往左走,

        比中间值大往右走。

        相等返回下标。

class Solution {
    public int search(int[] nums, int target) {
        return find(nums,target,0,nums.length-1);
    }
    public int find(int[] nums,int target,int left,int right){
        if(right<left){
            return -1;
        }
        int mid=(left+right)/2;
        if(nums[mid]==target){
            return mid;
        }
        if(target>nums[mid]){
            return find(nums,target,mid+1,right);
        }else{
            return find(nums,target,left,mid-1);
        }
        
    }
}


http://www.kler.cn/a/448013.html

相关文章:

  • YOLO-World:Real-Time Open-Vocabulary Object Detection
  • 常用的JVM启动参数有哪些?
  • 网络安全的攻防战争
  • go-zero负载均衡实现原理
  • html 中 表格和表单的关系与区别
  • PHY6239:具有高精确度AFE的无线MCU芯片,常用在智能穿戴上
  • 特征维度远大于样本量时候的过拟合问题
  • Vue2学习(一)——Vue简介、Vue指令与指令修饰符
  • 《Django 5 By Example》阅读笔记:p614-p644
  • 机器学习基础算法 (一)-线性回归
  • 【项目介绍】基于机器学习的低空小、微无人机识别技术
  • spring mvc | servlet :serviceImpl无法自动装配 UserMapper
  • 创建项目以及本地仓库和远程仓库并上传项目
  • 《探索QT 5.14.1:功能、特性与应用全解析》
  • Mysql-SQL执行流程解析
  • react中实现导出excel文件
  • 【CSS in Depth 2 精译_088】第五部分:添加动效概述 + 第 15 章:CSS 过渡特效概述 + 15.1:状态间的由此及彼
  • 默契之舞 之 生产者消费者模式(RabbitMQ)
  • [react 3种方法] 获取ant组件ref用ts如何定义?
  • CSS系列(25)-- 滚动优化详解
  • [DASCTF 2024最后一战|寒夜破晓,冬至终章] 数论的气氛
  • rk3568之mpp开发笔记怎么实现mpp编码摄像头实时码流?
  • 换工作,如何退出微软账户???(删除注册表数据)
  • powerhsell 初认识
  • 252-8路SATAII 6U VPX高速存储模块
  • 一个类就创建Json反序列化所需的属性