算法--Java青蛙跳台阶问题(一次可以跳n阶)

一、问题

1、初级版

一只青蛙跳台阶,一次可以跳1阶,可以2阶。那么,台阶为n时,有多少种跳法。

2、升级版

一只青蛙跳台阶,一次可以跳1阶,可以2阶,其能力足够强大以至于一次可以跳n阶。那么,台阶为n时,有多少种跳法。

二、思路与代码

1、第一种情况(初级版)

一次只能挑一阶或者两阶时。如果只有1阶,那么一共有1种跳法;
如果有2阶,那么一共有2种跳法。如果有n阶时,最后一步青蛙只能从第n-1或者n-2这两种情况往上跳。
那么,假设n阶时有f(n)种跳法,由上可知:

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

2、所以初级版Java代码如下

public static void main(String[] args) {
        int a = 5;
        System.out.println(qingwa(a));
    }
    private static int qingwa(int a) {
        if (a == 1) {
            return 1;
        } else if (a == 2) {
            return 2;
        }else {
            return qingwa(a - 1) + qingwa(a - 2);
        }
    }

如果有5阶时,输出结果为8:

D:\java\jdk8\bin\java 
8
Process finished with exit code 0

3、第二种情况(升级版)

升级版的青蛙具有超凡的能力,问题也更加复杂。
假设一共有n阶,同样共有f(n)种跳法,那么这种情况就比较多,最后一步超级蛙可以从n-1阶往上跳,也可以n-2阶,也可以n-3…等等等,一次类推。
所以,可知:

式1:
f(n) = f(n-1) + f(n-2) + ... + f(2) + f(1)

而且,容易得出:

式2:
f(n-1) = f(n-2) + f(n-3) + ... + f(2) + f(1)

将式1中的f(n-2) + f(n-3) + … + f(2) + f(1) 替换成式2,可知:

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

3、所以升级版Java代码如下

public static void main(String[] args) {
        int a = 3;
        System.out.println(qingwa(a));
    }
    private static int qingwa(int a) {
        if (a == 1) {
            return 1;
        } else {
            return 2 * qingwa(a - 1);
        }
    }

如果有3阶时,输出结果为4,结果正确!

三、总结

以上只是从递归的方式给出的解决思路。方法不唯一,以后有机会进行更深的研究和探讨。

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值