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("输入错误");
        }
    }
}
相关推荐
于壮士hoho几秒前
Python | Dashboard制作
开发语言·python
2301_803554521 分钟前
c++和c的不同
java·c语言·c++
fie88894 分钟前
用模型预测控制算法实现对电机位置控制仿真
算法
Kent_J_Truman7 分钟前
【交互 / 差分约束】
算法
ghie909013 分钟前
x-IMU matlab zupt惯性室内定位算法
人工智能·算法·matlab
Magnum Lehar22 分钟前
3d游戏引擎的Utilities模块实现
c++·算法·游戏引擎
意倾城32 分钟前
JVM内存模型
java·jvm
普通的冒险者44 分钟前
几个简单的数组小练习(适合初学)
java·数据结构
keke1044 分钟前
Java【10_1】用户注册登录(面向过程与面向对象)
java·python·intellij-idea
程序员buddha44 分钟前
Spring & Spring Boot 常用注解整理
java·spring boot·spring