数据结构和算法:打卡第十二天

十二、递归
1、应用场景:看个实际应用场景,迷宫问题(回溯 )
2、概念: 递归就是方法自己调用自己 , 每次调用时 传入不同的变量 . 递归有助于编程者解决复杂的问题 , 同时可以让代码变得简洁。
3、递归调用机制
  1) 打印问题
  2) 阶乘问题
  3) 使用图解方式说明了递归的调用机制
4、代码展示
public class RecursionTest {

	public static void main(String[] args) {

		test(4);
	
		//int res = factorial(3);
		//System.out.println("res=" + res);
	}
	//打印问题. 
	public static void test(int n) {
		if (n > 2) {
			test(n - 1);
		} //else {
			System.out.println("n=" + n);
		// }
	}
	//阶乘问题
	public static int factorial(int n) {
		if (n == 1) { 
			return 1;
		} else {
			return factorial(n - 1) * n; // 1 * 2 * 3
		}
	}


}
5、递归用于解决什么样的问题
  1) 各种数学问题如: 8 皇后问题 , 汉诺塔 , 阶乘问题 , 迷宫问题 , 球和篮子的问题 (google 编程大赛 )
  2) 各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.
  3) 将用栈解决的问题--> 第归代码比较简洁
6、递归需要遵守的重要规则
  1) 执行一个方法时,就创建一个新的受保护的独立空间( 栈空间 )
  2) 方法的局部变量是独立的,不会相互影响, 比如 n 变量
  3) 如果方法中使用的是引用类型变量( 比如数组 ) ,就会共享该引用类型的数据 .
  4) 递归必须向退出递归的条件逼近 ,否则就是无限递归 , 出现 StackOverflowError ,死龟了 :)
  5) 当一个方法执行完毕,或者遇到 return ,就会返回, 遵守谁调用,就将结果返回给谁 ,同时当方法执行完毕或 者返回时,该方法也就执行完毕
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值