Java基础——递归思想

 一、 递归思想

1.1 什么是递归

递归是指方法调用自身的编程技巧,通过将复杂问题分解为相似的子问题来求解。

// 最简单的递归示例(会导致栈溢出!)
public void endlessRecursion() {
    endlessRecursion(); // 无限递归,最终StackOverflowError
}

所以使用递归的时候,递归一定要有出口,否者会出现内存溢出。

工作原理是调用栈(Call Stack)机制

每次方法调用都会在栈内存中创建栈帧(Stack Frame),包含

1.2 递归练习

递归练习1 

package com.lkbhua.Algorithm.sort;

public class RecursionTest {
    public static void main(String[] args) {
        /*利用递归思想:求1-100之间的和*/

        // 大问题拆解为小问题
        // 1-100之间的和 = 100 + (1-99之间的和)
        // 1-99之间的和 = 99 + (1-98之间的和)
        // 1-98之间的和 = 98 + (1-97之间的和)
        // 依次类推------------
        // 1-1之间的和 = 1 (递归的出口)
        int sum = getSum(100);
        System.out.println(sum);
    }

    public static int getSum(int n){
        if(n == 1){
            return 1;
        }

        // 递归调用
        return n + getSum(n - 1);
    }
}

递归练习2

package com.lkbhua.Algorithm.sort;

public class RecursionTest2 {
    public static void main(String[] args) {
        /*求5的阶乘利用递归*/

        // 大事化小
        // 5!= 4! * 5
        // 4!= 3! * 4
        // 3!= 2! * 3
        
        System.out.println(factorial(5));

    }
    public static int factorial(int n){
        if(n == 1){
            return 1;
        }
        return n * factorial(n - 1);
    }
}

1.3 优缺点

优点说明
代码简洁自然表达问题的数学定义
逻辑清晰符合人类思维模式,易于理解
问题分解自动处理复杂的状态管理
缺点说明
性能开销每次调用都有栈帧创建和销毁的开销
栈溢出风险递归深度过大导致 StackOverflowError
调试困难调用栈深时难以追踪
内存占用每个栈帧占用内存,可能导致内存不足

声明:

题目详细分析借鉴于通义AI

以上均来源于B站@ITheima的教学内容!!!

本人跟着视频内容学习,整理知识引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值