青蛙跳台阶问题Java版

一、初级版

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

分析
由于一次只能跳一阶或者两阶,所以:
台阶数为1时:只有一种跳法,f(1)=1;
台阶数为2时:可以一阶一阶跳,也可以一次跳上去,所以f(2)=2;
台阶数为3时:当青蛙第一次跳 1 级台阶时,还剩下 n - 1个台阶,就还剩下 f(n - 1)种跳法;当青蛙第一次跳 2 阶台阶时,还剩下 n - 2 个台阶,就还剩下 f(n - 2)种跳法。所以f(3) = f(2) + f(1).

台阶数为n时:如果有n阶时,最后一步青蛙只能从第n-1或者n-2这两种情况往上跳。至于f(n-1)和f(n-2)为多少,我们并不关心,只需要将它们向下递归就可以了。

代码:

import java.util.Scanner;

public class TestDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(n+"级台阶共有:"+jump(n)+"种跳法");
    }
    public static int jump(int n) {
        if(n==1) {
            return 1;
        }
        if(n==2) {
            return 2;
        }
        return jump(n-1)+jump(n-2);
    }
}
//输入n=3
3级台阶共有:3种跳法
二、进阶版

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

分析
假设一共有n阶,青蛙在最后一步时可以从n-1阶往上跳,也可以n-2阶,也可以n-3…等等等,依次类推,则有:

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

同理

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

所以就可将式1中的 f(n-2)+…+ f(2 )+ f(1)换成 f(n-1),然后就得到了:

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

代码:

import java.util.Scanner;

public class TestDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(n+"级台阶共有:"+jump(n)+"种跳法");
    }
    public static int jump(int n) {
        if(n == 1) {
            return 1;
        }
        return 2*jump(n-1);
    }
}
//输入n=3
3级台阶共有:4种跳法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值