Java第五课——递归

Java第五课——递归

递归指的是函数调用自己,可以简化代码,下面以阶乘、斐波拉契数列和汉诺塔的实现来介绍阶乘。

阶乘

首先创建一个类

public class Recursion{ }

实现递归的关键在于找到终止条件,就以阶乘为例,要想求n的阶乘,也就是求n×(n-1)×(n-2)…×2×1,当到1的时候就终止了,也就是if(n==1)时终止,不等于1的时候就调用自己且把n-1代入。
若函数为int f(int n)
则2的阶乘: 2×f(2-1) = 2×1
3的阶乘 3×f(3-1) = 3×2×f(2-1) = 3×2×1
n的阶乘 n×f(n-1) = n×f(n-1) = n×(n-1)×f(n-1-1) =…= n×(n-1)×(n-2)×…×3×f(3-1) = n×(n-1)×(n-2)×…×3×2n×(n-1)×(n-2)×…×3×1

public class Recursion{
	public int factorial(int n){
		//终止条件
		if(n==1){
		return 1;
		}
		//不等于1
		return n*factorial(n-1);
	}
}

斐波拉契数列

斐波拉契数列为 0、1、1、2、3、5、8、13、21、34…也就是前两个数的和等于后面的数,开头是0、1
若要求第n个数的值,先假设函数为int f(int n),那么当n=1时,结果为0,n=2时结果为1。
若n=3,也就是第1、2个数的和,即f(3-1)+f(3-2)
n=4,f(4-1)+f(4-2)
n,f(n-1)+f(n-2)

public class Recursion{
	public int fblq(int n){
		//终止条件
		if(n==1){
			return 0;
		}else if(n==2){
			return 1;
		}
		return fblq(n-1)+fblq(n-2);
	}
}

汉诺塔

汉诺塔的递归也是同理,但稍微复杂了一点点,多了三根柱子,但找到原理之后并不难。
若要把所有圆盘从A柱子移到C柱子
1个圆盘的时候:把第一个圆盘从A移到C
2个圆盘的时候:把第一个圆盘从A移到B,把第二个圆盘从A移到C,把第三个圆盘从B移到C
3个圆盘的时候:把上面两个盘从A移到B,把第三个圆盘从A移到C,把剩下两个盘从B移到C
则n个盘的时候:把上面n-1个盘从A移到B,把第n个盘从A移到C,把剩下的盘从B移到C

public class Recursion{
	public void hnt(int n,String A,String B, String C){
		if(n==1){
			System.out.println("第"+1+"个盘"+"从"+A+"移到"+C);
			return;
		}
		hnt(n-1,A,C,B);//从A到B
		System.out.println("第"+n+"个盘"+"从"+A+"移到"+C);
		hnt(n-1,B,A,C);//从B到C
	}
}

递归的使用基本上就讲完了,核心就是找到终止条件和递归的形式(加还是减,乘还是除),利用return来实现递归的进行和停止。递归在画图板中也用运用,下节课就讲画图板中的运用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值