【70】爬楼梯:递归思想

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

题目不难,这里我主要想写一下递归思想

递归篇

要想用递归,必须满足三个条件:

  1. 一个问题的解可以分为几个子问题的解;
  2. 这个问题和分解后的子问题,除了数据规模不同,求解思路完全一样
  3. 存在递归终止条件

再来看看上面的爬楼梯问题:想求n阶楼梯的不同爬法。假设你已经知道了1至(n-1)阶楼梯的解
来分解子问题吖:
①第一步走了一个台阶——剩下n-1个台阶的爬法,你已经知道为f(n-1);
②第一步走了两个台阶——剩下n-2个台阶的爬法,你已经知道为f(n-2)。
子问题也就这两种情况叭~,递归关系这不就出来了嘛:f(n)=f(n-1)+f(n-1)
终止条件题目已经给出:f(1)=1,f(2)=2。
好了,根据递归终止条件,你就可以解决刚刚提出的那个假设问题,计算出f(1)…f(n)。

递归代码如下:

	public int climbStairs(int n) {
		if(n==1)
			return 1;
		if(n==2)
			return 2;
		//n阶楼梯爬法拆解:第一步走了1阶+f(n-1)   第一步走了2阶+f(n-2)
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值