青蛙跳台阶最简单的递归解法

爬楼梯
在这里插入图片描述
只有两种上法,一级或者两级
每走一步,都会面临两种选择(上一级或者跳两级),不管做出哪种选择,都要递归把走完这步后的剩余楼梯阶数传给下一次,继续面临两种选择
至于有多少种走法,必须是两种选择后产生的所有可能的总和

拿个最简单的3级楼梯:
已知1级楼梯仅剩1种走法,2级楼梯仅剩2种走法,得:
1:第一次先走一级,那么只剩下两级,两级楼梯仅剩两种走法,所以返回2
2:第一次先走两级,那么只剩下一级,一级楼梯仅剩一种走法,所以返回1
所以三级楼梯的全部跳法只有:2+1 = 3种,罗列出来:
第一种:1,1,1
第二种:2,1
第三种:1,2

所以思路就清晰了,每次递归都分两种情况减少对应的步长,直到减到2或者1,再直接返回已知的走法,两种情况加起来,就是N级阶梯总的可能走法
公式:
0, n<=0;
f(n) = { 1, n = 1;
2, n=2;
f(n-1)+f(n-2) , n>2;

得出了公式,再拿一个复杂点的例子,4级楼梯:
先看开始先走一级的情况:
1:先走1级(剩下3级)
1-1:走1级(剩下2级,返回仅有的2种走法)
1-2:走2级(剩下1级,返回仅有的1种走法)
2:先走2级(剩下2级,直接返回仅有的2种走法)
所以,4级楼梯总的走法为2+1 +2 = 5

回过头再看:
0级楼梯:0种走法
1级楼梯:1种走法
2级楼梯:2种走法
3级楼梯:3种走法
4级楼梯:5种走法
………
轻松看出,从3开始,每一项都是前两项之和,这种数列,数学家们称为斐波那契数列

不纠结于什么波数列,反正按照我们自己的思路,代码也就呼之欲出:

guagua,就是呱呱,青蛙🐸
Public static int gugua_jump( int step ){
	if (step <=0 ) {
		return 0; 
		}
	if (step <=2 ) {
		return step; 
		}
	// 递归算出当前选择跳1级的情况
	int jump1 = gugua_jump(step-1);
	// 递归算出当前选择跳2级的情况
	int jump2 = guagua_jump(step-2);
	// 返回当前N级楼梯的两种跳法的总和
	return jump1 + jump2;
}
main方法调用一下:
public static void main(String[] args) throws IOException {
        int sum = guagua_jump(5);
        System.out.println(sum);
    }

这里假设一共5级楼梯,按照什么波的逻辑,5级= 4级+3级 = 5+3 = 8

看结果是不是:

在这里插入图片描述

那就对了,还有其他2种解法,听说效率更优的,以后持续补充~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值