目录
一、递归
递归就是方法自己调用自己,每次调用时传入不同的变量。
二、递归执行机制
递归打印示例代码:
public class RecursionTest {
public static void main(String[] args) {
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);
}
}
执行流程图:
三、递归的规则
1、执行一个方法时,就创建一个新的受保护的独立空间(栈空间)。
2、方法的局部变量是独立的,不会相互影响。
3、如果方法中使用的是引用类型变量(如数组、对象),就会共享该引用类型的数据。
4、递归必须向退出递归的条件逼近,否则就是无限递归,会报StackOverflowError错误。
5、当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就会执行完毕。
四、递归使用
1、使用递归求出斐波那契数如1,1,2,3,5,8....给一个位数n,求出n所在的值。
示例代码:
public class RecursionTest1 {
public static void main(String[] args) {
A a = new A();
int fibonacci = a.fibonacci(-1);
if (fibonacci > 0){
System.out.println("这个斐波那契数列是"+ fibonacci);
}else {
System.out.println("请传入一个正数");
}
}
}
class A{
public int fibonacci(int n){
if (n >= 1){
if (n == 1 || n == 2){
return 1;
}else {
return fibonacci(n - 2) + fibonacci(n - 1);
}
}else {
return -1;
}
}
}
2、猴子吃桃:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!以后每天猴子都吃其中一半,然后再多吃一个,当第十天时,就只剩一个桃子。第一天有多少个桃子
示例代码:
public class RecursionTest2 {
public static void main(String[] args) {
B b = new B();
int peach = b.peach(9);
if (peach > 0){
System.out.println("当前桃子还剩" + peach);
}else {
System.out.println("你输入的天数不正确,请输入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;
}
}
}