【Java】递归案例分析(入门+案例分析详解)

首先我们来看一下递归的定义方便加深理解:
记录递归是一种算法,指在程序设计语言中,方法直接
(如 methodA() 方法内部调用 methodA() )或间接(如 methodA() 调用 methodB(),methodB() 又调用 methodA() )调用自身的形式。
其实递归本质是在方法中调用自己

本文将会用几个典型的案例来解释递归的用法和思路,还有避免递归的危险区,如,死龟问题

(本章部分图片内容选自网络素材,如果有更好的解题思路或者解法欢迎评论区留言,共同进步💗💗💗)


1、递归

1.1、递归入门案例

先易后难,先浅后深

思考问题:如何打印 2 - 5的值 (2,3,4,5)

//实现打印数字  2,3,4,5
    public void f(int num1) {
   
        if(num1 > 2){
   
            f(num1 - 1);
        }
        System.out.print(num1 + " ");

1、n = 5 时 返回 f(1) f(2) f(3) f(4) 5
2、n = 4 时 返回 f(1) f(2) f(3) 4
3、n = 3 时 返回 f(1) f(2) 3
4、n = 2 时 返回 f(1) 2
5、n = 1 时 开始返回 1
逐层向上返回

输出结果为:
在这里插入图片描述

在这里插入图片描述

1.2、递归(*)

1.2.1、递归基本介绍

简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂问题 , 同时可以让代码变得简洁

自己调用自己

1.2.2、递归案例

1.2.2.1、打印问题

打印上面简单案例,并思考如果加上else结果会怎样
打印2-5

//Recursion01
public class Recursion01{
   
	public static void main(String[] args){
   
			T t1 = new T();
			t1.test(5);//2,3,4,5
	}
}

class T {
   
	//分析
	public void test(int n) {
   
		if (n > 2) {
   
			test( n - 1);
		}
		System.out.println("n = " + n);
	}
}

思考 : 如果加上else结果是什么?

在这里插入图片描述

此时if和else作为一个整体,只会执行符合条件的num1 <= 2的情况,即只会输出结果为:2
在哪里调用的就返回给谁

在这里插入图片描述

1.2.2.2、阶乘问题
//Recursion01
public class Recursion01{
   
	public static void main(String[] args){
   
			T t1 = new T();
			t1.test(5);//2,3,4,5

			int res = t1.factorial(5);
			System.out.println(res);//120
	}
}

class T {
   
	//分析
	//当n = 1 时返回 1
	//当n = 2 时返回f(1) * 2
    //当n = 3 时返回f(2) * 3
    //当n = 4 时返回f(3) * 4
    //当n = 5 时返回f(4) * 5 
	public int factorial( int n){
   
		if(n == 1){
   
			return 1;
		}else{
   
			return factorial(n - 1) * n;
		}
	}
}

一层层嵌套

过程分析
在这里插入图片描述

1.3、Recursion内存图

  • if ....else ....内存图
    来自于网络

1.4、递归的重要规则

如果是引用数据类型:就会共享数据,传递的是地址

1.5、递归课堂练习

1.5.1、斐波那契

当前数 = 前1数 + 前2数 ----》f(3) = f(2) + f(1);【并且f(2)和f(1)都为1】
如: 1 , 1 , 2 , 3 , 5 , 8 , 13 …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Debug 熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值