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("输入错误");
        }
    }
}
相关推荐
0白露1 小时前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.2 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐2 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
想跑步的小弱鸡2 小时前
Leetcode hot 100(day 3)
算法·leetcode·职场和发展
战族狼魂2 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
Tttian6223 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
xyliiiiiL3 小时前
ZGC初步了解
java·jvm·算法
杉之4 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
爱的叹息4 小时前
RedisTemplate 的 6 个可配置序列化器属性对比
算法·哈希算法
hycccccch4 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq