深入理解递归:概念、执行机制、规则及其使用
目录

一、递归
递归就是方法自己调用自己,每次调用时传入不同的变量。
二、递归执行机制
递归打印示例代码:
public class RecursionTest {
主要的公共静态方法是 main 方法,它接收一个字符串数组作为参数。 这个方法用于程序的入口点,程序从这里开始执行。 在这个方法内部,可以编写各种逻辑和代码来实现程序的功能。 它是 Java 程序的核心部分,通过调用其他方法和执行特定的操作来完成程序的任务。
T t = new T();
t.test(4);
}
}
class T{
public void test(int n){
if (n > 2){
test(n - 1);
}
System.out.println("n=" + n);
}
}
执行流程图:
三、递归的规则
执行一个方法时,会创建一个新的空间。这个空间是受保护的、独立的,属于栈空间。
2、方法的局部变量是独立的,不会相互影响。
如果方法中使用的是引用类型变量,像数组或者对象这类的,那么就会共享该引用类型的数据。
递归需要朝着退出递归的条件靠近。如果不这样做,就会出现无限递归的情况,进而会报 StackOverflowError 错误。
当一个方法执行完毕时,就会返回。遇到 return 时,也会返回。它遵守谁调用就将结果返回给谁的原则。同时,当方法执行完毕或者返回时,该方法就会执行完毕。
四、递归使用
使用递归的方法来求出斐波那契数列,像 1,1,2,3,5,8 等等这样的数列。给定一个位数 n,需要求出 n 在这个数列中所对应的数值。
示例代码:
public class RecursionTest1 {
public static void main(String[] args) {
A a = new A();
获取斐波那契数列的值,通过调用对象 a 的 fibonacci 方法并传入 -1 作为参数,将返回的结果赋值给变量 fibonacci 。
if (fibonacci > 0){
System.out.println("它的值为" + fibonacci);
}else {
请将一个正数传递进来。
}
}
}
class A{
public int fibonacci(int n){
if (n >= 1){
if (n == 1 || n == 2){
return 1;
}else {
返回 fibonacci(n 减 2)与 fibonacci(n 减 1)的和;
}
}else {
return -1;
}
}
}
猴子吃桃这件事,有一堆桃子存在。猴子在第一天的时候,吃了这堆桃子当中的一半,并且还额外多吃了一个。从第二天开始,往后的每一天,猴子都吃当时桃子数量的一半,接着再多吃一个。等到第十天的时候,就只剩下一个桃子了。那么,第一天原本有多少个桃子呢?
示例代码:
public class RecursionTest2 {
public static void main(String[] args) {
B b = new B();
int peach = b.peach(9);
if (peach > 0){
系统输出“当前桃子还剩”加上桃子的数量 peach 。
}else {
你输入的天数不正确。请输入天数,这个天数需在 1 到 10 天之间。
}
}
}
class B{
public int peach(int day){
if (day == 10){
return 1;
} else if (day >= 1 && day <= 9){
return (peach(day + 1) + 1) * 2;
}else {
return -1;
}
}
}