Java递归

引入

java 复制代码
public class Demo01 {
    public static void main(String[] args){
        Demo01 demo01 = new Demo01();
        demo01.test(4);
    }
    
    public void test(int n ){
        if(n>2){
            test(n-1);
        }
        System.out.println("n="+n);
    }
}

大家可以看一下代码,自己想想会输出什么,再跑跑代码看看是不是一样的,具体的解释如下

这图是视频截取出来的,可以看到每递归一次就会创建了新的栈空间(黑线),每个栈都是独立,所以n也是独立的,当n=2时,不进入if判断,输出n=2,代码运行完毕,会把这个栈弹出,接着是返回n=3的栈(蓝线),运行完代码(每一个栈都会完整的执行完代码整体)进行输出后出栈。也就是后进先出,会先执行最后一个。

若是在if后面加一个else呢,又会打印什么?

java 复制代码
public class Demo01 {
    public static void main(String[] args){
        Demo01 demo01 = new Demo01();
        demo01.test(4);
    }

    public void test(int n ){
        if(n>2){
            test(n-1);
        }else {
            System.out.println("n="+n);
        }

    }
}

加上else就之会输出n=2了,因为if-else语句只会执行满足条件的一条。

阶乘的递归实现

java 复制代码
​
public class Demo01 {
    public static void main(String[] args){
        Demo01 demo01 = new Demo01();
        demo01.test(4);
    }
    
    public void test(int n ){
        if(n>2){
            test(n-1);
        }
        System.out.println("n="+n);
    }
}

斐波那契数列

java 复制代码
public class Demo03 {
    public static void main(String[] args) {
        Demo03 demo03 = new Demo03();
        int str = demo03.recursion01(6);
        System.out.println(str);
    }
    /*
    斐波那契数列1,1,2,3,5,8,13...
    1、当n=1 为1
    2、当n=2 为1
    3、当n>=3 为前两个数的和
     */
    //通项公式+终止条件
    public int recursion01(int n){
        if(n>=1){
            if(n==1||n==2){ //n<3
                return 1;
            }else {
                return recursion01(n-1)+recursion01(n-2);
            }
        }else {
            System.out.println("输入错误");
        }
    }
}
相关推荐
one_love_zfl5 分钟前
java面试-微服务组件篇
java·微服务·面试
一只大袋鼠8 分钟前
Java进阶:CGLIB动态代理解析
java·开发语言
秦ぅ时9 分钟前
保姆级教程|OpenAI tts-1-hd模型调用全流程(Python+curl+懒人用法)
开发语言·python
Eiceblue17 分钟前
使用 C# 将 Excel 转换为 Markdown 表格(含批量转换示例)
开发语言·c#·excel
环流_22 分钟前
HTTP 协议的基本格式
java·网络协议·http
爱滑雪的码农23 分钟前
Java基础十三:Java中的继承、重写(Override)与重载(Overload)详解
java·开发语言
Java面试题总结24 分钟前
使用 Python 设置 Excel 数据验证
开发语言·python·excel
【 】42326 分钟前
C++&STL(Standard Template Library,标准模板库)
java·开发语言·c++
茉莉玫瑰花茶27 分钟前
LangChain 核心组件 [ 2 ]
java·数据库·langchain
eastyuxiao33 分钟前
OpenClaw 自动处理核心逻辑
开发语言·人工智能