抄代码DAY9 递归

递归的意思就是在运行时自己调用自己本身。一般用递归写出来的代码都比较简短,麻烦的事都交给编译器了。而且递归会大大增加空间复杂度和时间复杂度。因为每一层递归就等于把上一层递归放入了栈里

递归因该具有两个条件:(1)原问题和子问题是一样的问题,(2)要有出口,不能一直调用自己,就是说要跳出递归。

我们最常见的递归就是阶乘,我们要想知道10的阶乘,就必须知道9的阶乘;想知道9的阶乘,必须知道8的阶乘;8的阶乘就要知道7的阶乘......以此类推。实际上就是调用自己的过程。

此外就是汉诺塔问题,是典型的递归调用。

简单探讨一下汉诺塔问题,汉诺塔的原理这里再简单提一下,就是有3根柱子A,B,C。A柱子上由上至下依次由小至大排列的圆盘。把A柱子上的圆盘借B柱子全部移动到C柱子上,并且移动的过程始终是小的圆盘在上,大的在下。

我们先想只有一个圆盘时候的情况就很好理解。在推广到n上,先处理第n、n-1个就好。我们可以先把n-1个圆盘从A借助C成功的移动到B,然后再把第n个圆盘从A移动到C,最后再把n-1个圆盘从B借助A成功的移动到C。同样以此类推。改变里面的参数,就可以解决汉诺塔问题。

然后是斐波那契数列,在王道和许多考研教材里,都用它来讲递归。因为他就是一个很明显的递归函数,看看代码:

		public static int fibonacci(int paraN) {
			if (paraN <= 0) {
	
				return 0;
			} if (paraN == 1) {
				
				return 1;
			}
			
			return fibonacci(paraN - 1) + fibonacci(paraN - 2);
		}

		public static void main(String args[]) {
			for(int i = 0; i < 10; i ++) {
				System.out.println("Fibonacci " + i + ": " + fibonacci(i));
			}
		}
	


其结果为:

 总结:递归还是很常用的,在树和图的遍历以及归并排序算法中应用广泛,在图和树那里会详谈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值