java-方法递归调用(重点)

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

递归法思考

  1. 汉诺塔放置

在这里插入图片描述
如何把A框的方格完全移动到C框(条件:下方格子必须必上方格子长)

  • 走迷宫
  • 八皇后

递归入门源码分析

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

class T {
	public void test(int n){
		if (n > 2){
			test(n - 1);		//递归调用
		}
		System.out.println("n = " + n);
	}
}
/*这个代码最后输出什么?
n = 2?
NO!
n = 4
n = 3
n = 2
没错,先输出顶层的栈,顶层栈为n = 2;

在这里插入图片描述
递归会不断地占用内存空间,容易栈溢出
每个栈是独立空间,每个n也是独立的
栈执行后会释放内存

练习代码分析

```java
public class Recursion01{
	public static void main(String[] args){
		T t1 = new T();
		t1.test(4);
	}
}

class T {
	public void test(int n){
		if (n > 2){
			test(n - 1);		//递归调用
		}else{
			System.out.println("n = " + n);
		}
	}
}
//输出 n = 2

练习代码分析(阶乘递归调用)

public class Recursion01{
	public static void main(String[] args){
		T1 t1 = new T1();
		System.out.println(t1.factorial(5));
	}
}
class T1{

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

//输出120

方法递归注意

  • 递归必须向退出递归的条件逼近,否则就是无限递归,出现StrackOverflowError,死龟了:)
  • (栈溢出)当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕
  • 执行方法时,就创建一个新的受保护的独立空间(栈空间)
  • 方法的局部变量是独立的,不会相互影响,比如n变量
  • 如果方法中使用的引用类型变量(比如数组,对象),就会共享该引用类型的数据。

递归练习(斐波那契数列)

package practice;

import java.util.Scanner;

public class practice1{
    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Add t1 = new Add();

        System.out.println("当前位置的斐波那契数列为"+t1.fibonacci(n));    //返回第8位的斐波那契数列,值为21
    }
}
class Add{
    public int fibonacci(int n){    //n是位数
        if (n == 1 || n == 2){
            return 1;       //返回的是数值,不是位数
        } else {
            return fibonacci(n - 1) + fibonacci(n - 2); //返回的数值
        }

    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鬼鬼骑士

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

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

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

打赏作者

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

抵扣说明:

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

余额充值