青蛙跳台阶,青蛙变态跳台阶问题(Java数据的递归,斐波那契数列)

青蛙跳台阶,青蛙变态跳台阶问题(Java数据的递归,斐波那契数列)

1. 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

先从题目来假设分析,青蛙跳一个台阶有一种跳法。 也就是F(1)=1;青蛙跳两个台阶也就是有两种方法。直接跳2或者是 1 1 的跳。那么跳三个台阶就是有3种,分别为1 1 1 一种,或者2 1又或者1 2。我们可以以此先来找出规律在分析:

1  1 
2   2 
3   (111 1 2 2 1) 3 
4  (1111  1 1 2    .1 2 1.  2 1 1  2 2 ) 5 
5   (1111 1112   1121  1211  2111  221  212  122   )8 
6  (111111. 【11112   5】【1122  1212  2112  2121  2211 1221   】222 )13 

从三开始斐波那契数列

也就是可看出有f(n)=f(n-1)+f(n-2)这样的规律, 很简单的想一下,就是跳上N台阶的跳法个数 就是跳上N-1个台阶的跳法个数加上 跳上N-2的的跳法个数。那么这样的规律是为什么呢?解释一下这个的原因就是,青蛙一次只能跳一个台阶或者两个台阶,那么跳上该台阶的跳法就是从前一个台阶跳1跳上该台阶或者是从前前一个台阶跳2跳上该台阶。那么意思就很明确了。有多少种跳法跳到前一个台阶就有多少种跳法跳到该台阶。有多少种跳法跳到前前一个台阶就有多少种跳法跳到该台阶。那么跳到该台阶的跳法个数就是跳到前一个台阶的跳法个数加上后一个台阶的跳法个数。

代数解释下,青蛙跳到7台阶的跳法个数:F(7)=F(6)+F(5);
青蛙有多少种跳法跳到F6就有多少种跳法跳到F7 青蛙有多少种跳法跳到F5就有多少种跳法跳到F7.
则青蛙跳到F7的跳法就是跳到F6的跳法加上跳到F5的跳法。

代码实现:

	public class Solution {
public int JumpFloor(int target) {
    if(target  <= 0){
        return -1;
    }
    if(target == 1){
        return 1;
    }
    if(target == 2){
        return 2;
    }
    else{
        return JumpFloor(target -1)+JumpFloor(target-2);
         
    }
 }
}

2.一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

从问题来看和青蛙跳台阶的不同就是该题多了一个一次可以跳n级的跳法次数。

分析青蛙跳到一个台阶有 1种跳法。青蛙跳到2层台阶有1 1 ,2两种跳法。那么三层的时候多了一个一次可以跳三层的跳法也就是1 1 1 , 1 2 , 2 1, 3共有四种跳法。

个人觉得先分析再看:

分析:

一共有n级台阶 那么就有n种跳法:跳1阶,跳2阶…跳n阶;
f(1)=1
f(2)=f(1)+f(2); / / f(1)一次跳一阶的跳法次数+f(2) 一次跳2阶的跳法次数

f(2)=f(1) +1  //这里f(2)是一次跳两级 也就是只有一个跳法,所以为 1 ==      ————**以下同理**

f(3)=f(1)+f(2)+f(3).

f(3)=f(1)+f(2)+1.


f(n)=f(1)+f(2)+…+f(n-1)+1;

那么以上的结论是没问题的:也就可以得出,

f(n-1)=f(1)+f(2)+…+f(n-2)+1

则可以看出!!!

f(n)=f(n-1)+f(n-1)
f(n)=2*f(n-1)

在这里插入图片描述

代码实现:

public class Solution {
public int JumpFloorII(int target) {
    if(target <=0){
        return 0;
    }else if(target ==1){
        return 1;
    }else {
    return 2 * JumpFloorII(target - 1);
    }
}
}

规律分析:
ps:还是找原理简单,这种很麻烦且很不合适。

1 1】1 
2 11 2   】2 
3 111 12 21 3】4 
4【1111 112 121 211 22 13 31 4】 8 
5【11111 1112 1121 1211 2111 221 122 212  311 113 131 32 23 41 14 5】16 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值