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("输入错误");
        }
    }
}
相关推荐
零千叶9 分钟前
【面试】AI大模型应用原理面试题
java·设计模式·面试
Yingye Zhu(HPXXZYY)3 小时前
ICPC 2023 Nanjing R L 题 Elevator
算法
坐吃山猪5 小时前
SpringBoot01-配置文件
java·开发语言
晚风(●•σ )5 小时前
C++语言程序设计——06 字符串
开发语言·c++
我叫汪枫5 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
Nicole-----5 小时前
Python - Union联合类型注解
开发语言·python
晚云与城5 小时前
今日分享:C++ -- list 容器
开发语言·c++
yaoxtao5 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
兰雪簪轩6 小时前
分布式通信平台测试报告
开发语言·网络·c++·网络协议·测试报告
程序员Xu6 小时前
【LeetCode热题100道笔记】二叉树的右视图
笔记·算法·leetcode