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("输入错误");
        }
    }
}
相关推荐
二哈喇子!5 分钟前
BOM模型
开发语言·前端·javascript·bom
二哈喇子!7 分钟前
Java开发工具——IDEA(修改全局配置,提升工作效率)
java·编辑器·intellij-idea
二哈喇子!13 分钟前
空指针异常
开发语言
强子感冒了18 分钟前
Java网络编程学习笔记,从网络编程三要素到TCP/UDP协议
java·网络·学习
咚为20 分钟前
Rust Print 终极指南:从底层原理到全场景实战
开发语言·后端·rust
二哈喇子!20 分钟前
SpringBoot项目右上角选择ProjectNameApplication的配置
java·spring boot
%xiao Q25 分钟前
GESP C++五级-202406
android·开发语言·c++
Psycho_MrZhang25 分钟前
Neo4j Python SDK手册
开发语言·python·neo4j
Traced back32 分钟前
# C# + SQL Server 实现自动清理功能的完整方案:按数量与按日期双模式
开发语言·c#
Sarvartha36 分钟前
C++ STL 栈的便捷使用
c++·算法