递归

简介: 递归

什么是递归

指在当前方法内调用自己的这种现象。

调用时,要有一个退出的条件,否则会死循环。

计算1~n的和

1到3的和:1 + 2 + 3。

public static void main(String[] args) {
    int num = 3;
    // 调用求和的方法   
    int sum = getSum(num);
    //输出结果   
    System.out.println(sum);
}
private static int getSum(int num) {
    /*
    num 为1时 返回1 相当于函数的出口
    * */
    if (num == 1){
        return 1;
    }
    /*
       不为1时, 返回num和num-1的累加和
       递归调用getSum
    * */
    return num + getSum(num-1);
}

递归求阶乘

10的阶乘10!

10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1

public static void main(String[] args) {
    int num = 4;
    // 调用求和的方法   
    int sum = getJieCheng(num);
    //输出结果   
    System.out.println(sum);
}
private static int getJieCheng(int num) {
    /*
    num 为1时 返回1 相当于函数的出口
    * */
    if (num == 1){
        return 1;
    }
    /*
       不为1时, 返回num和num-1的累加和
       递归调用getSum
    * */
    return num * getJieCheng(num-1);
}

斐波那契数列

# 什么是斐波那契数列

又称黄金分割数列、因数学家列昂纳多 · 斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为 “兔子数列”

指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

# 求数列的第6位的值是多少

递归分析

当位数为1和2时,当前返回的值应该是1;
当位数为3时,返回值应该 =2=1+1;
当位数为4时,返回值 =3=2+1;
当位数为5时,返回值 =5=3+2;
大于等于3的情况下,当前位数(n)的数值 =f(n-1)+f(n-2)

public static void main(String[] args) {
    int f = f(3);
    System.out.println(f);
    //数列:1,1,2,3,5,8......
    for (int i = 1; i <= 15; i++) { //输出15个斐波那契数列
        System.out.print(f(i) + "\t");
    }
}
public static int f(int n) {
    if (n == 1 || n == 2)
        return 1;
    else
        return f(n - 1) + f(n - 2);
}

文件搜索

搜索指定目录下指定扩展名的文件,例如:D盘下 aaa目录中所有的 .txt文件

public static void printDir(File dir) {
    // 获取子文件和目录            
    File[] files = dir.listFiles();
    // 循环打印   
    for (File file : files) {
        if (file.isFile()) {
            // 是文件,判断文件名并输出文件绝对路径        
            if (file.getName().endsWith(".txt")) {
                System.out.println("文件名:" + file.getAbsolutePath());
            }
        } else {
            // 是目录,继续遍历,形成递归
            printDir(file);
        }
    }
}


相关文章
|
Java 开发者 C++
Java多线程同步大揭秘:synchronized与Lock的终极对决!
Java多线程同步大揭秘:synchronized与Lock的终极对决!
263 5
|
Ubuntu Linux 开发工具
idea使用git提交代码报异常refusing to merge unrelated histories和unknown option `allow-unrelated-histories‘
idea使用git提交代码报异常refusing to merge unrelated histories和unknown option `allow-unrelated-histories‘
|
机器学习/深度学习 算法 PyTorch
实战图像softmax分类模型
本文是学习softmax图像分类模型的总结,主要分享softmax图像分类模型的技术原理,以及用代码实现验证,供大家参考。
556 3
|
传感器 边缘计算 监控
边缘云作为一种分布式云计算架构,正在为多个行业和应用场景带来革命性的变化
边缘云应用于智能城市、工业物联网、零售、农业、AI、5G优化、制造、物流、医疗、交通和家居等领域,实现低延迟的数据处理、实时分析与优化。例如,智能交通利用边缘计算优化信号灯,减少拥堵;工业场景中,设备监控与预测性维护提升效率;在医疗中,实时监测患者数据支持远程诊断。此外,边缘云还助力零售业的个性化推荐、农业的精准作业和云游戏的高性能体验。
|
存储 中间件 Go
探索Gin框架:快速构建高性能的Golang Web应用
探索Gin框架:快速构建高性能的Golang Web应用
|
应用服务中间件 Linux 网络安全
宝塔Linux面板nginx配置SSL证书的解决方案
宝塔Linux面板nginx配置SSL证书的解决方案
1053 0
|
机器学习/深度学习 资源调度 算法
VAE图片生成实战
基本的自编码器本质上是学习输入𝒙和隐藏变量𝒛之间映射关系,它是一个判别模型 (Discriminative model),并不是生成模型(Generative model)。那么能不能将自编码器调整为 生成模型,方便地生成样本呢?
1344 0
VAE图片生成实战
|
SQL 分布式计算 资源调度
大数据线上问题排查系列 - 同样的HQL,在CDH与TDH平台执行效率差异巨大的根本原因与业务侧应对方案
大数据线上问题排查系列 - 同样的HQL,在CDH与TDH平台执行效率差异巨大的根本原因与业务侧应对方案
|
弹性计算 安全 Java
如何选择阿里云公共镜像、自定义镜像、共享镜像、镜像市场和社区镜像?
如何选择阿里云公共镜像、自定义镜像、共享镜像、镜像市场和社区镜像?
675 0
|
前端开发 JavaScript 关系型数据库
MacOs M1 芯片分布式搭建 Nginx+PHP+MySQL和多站点域名访问
一、安装Nginx 问题:Mac 在安装nginx之前记得把原本的apache2给卸载删除了,要不然后期会出现端口号被占用,或者有时候nginx用不了