递归的概念、分类、注意事项以及练习
递归
递归:指在当前方法内调用自己的这种现象。
递归的分类:
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。
间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。·
注意事项:
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
构造方法,禁止递归。
递归的使用前提:
当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
public static void main(String[] args){ a(); } /** * 递归一定要有条件限定,保证递归能够停止下来,否则会发生柱内存溢出。 * Exception in thread "main" java.lang.StackOverflowError */ private static void a() { System.out.println("a方法"); a(); }
在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
public static void main(String[] args){ b(1); } /** * 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。 * Exception in thread "main" java.lang.StackOverflowError */ private static void b(int i) { System.out.println(i); if (i==20000){ return; } b(++i); }
构造方法,禁止递归。
编译报错:构造方法是创建对象使用的,一直递归会导致内存中有无数多个对象,直接编译报错
练习—使用递归计算1-n之间的和
public static void main(String[] args){ int sum = sum(3); System.out.println(sum); } /** * 定义一个方法,使用递归计算1-n之间的和 * 1+2+3+...+n * n+(n-1)+(n-2)+...+1 * 已知: * 最大值:n * 最小值:1 * 使用递归必须明确: * 1、递归的结束条件 * 获取到1的时候结束 * 2、递归的目的 * 获取下一个被加的数字(n-1) */ private static int sum(int n) { if (n==1){ return 1; } return n+sum(n-1); }
注意:
使用递归求和,main方法调用sum方法sum方法会一直调用sum方法
导致在内存中有多个sum方法(频繁的创建方法调用方法销毁方满)效率低下
所以如果仅仅是计算1-n之问的和,不推荐使用递归使用for循环即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!