青蛙台阶问题

青蛙跳台阶问题中,从一级到n级台阶有不同的跳跃方式。当n为45时,方法数约达18亿,而跳50级时,使用int类型导致结果错误和运行时间增加。解决方案是将变量类型升级为double。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

青蛙一次可以跳上一级台阶,也可以一次跳上两级台阶。那么青蛙跳上n级台阶有多少种方法?

 

台阶数             方法数
     1                      1
     2                      2
     3                      3
     4                      5
     5                      8
     ·                        ·
     ·                        ·
     ·                        ·
由以上数据可以推出从青蛙跳三级台阶开始,f(n) = f(n - 1) + f(n - 2)  这里(n >= 3)(斐波那契数列)
 
 
import java.util.Scanner;

public class Test3 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();//从键盘输入青蛙要跳的台阶数
        int ret = frogjump(n);
        System.out.println("青蛙跳" + n + "级台阶,共有" + ret + "种方法");
    }
    public static int frogjump(int x){
        int methonds = 0;
        if(x == 1||x == 2)//当台阶数为1和2时,方法数与台阶数相同
            methonds = x;
        else{//当台阶数大于等于3时,方法数等于前两个台阶数对应的方法数之和
            methonds = frogjump(x - 1) + frogjump(x - 2);
        }
        return methonds;
    }
}

测试:

跳一级台阶

 跳3级台阶:

 青蛙跳45级台阶:

 

 

 当青蛙跳45级台阶时,方法数已经大约达到18亿种

青蛙跳50级台阶:

 当青蛙跳到50级台阶时,运行时间明显变长,并且结果已经不正确了,这说明int类型的变量已经不够用了

将变量ret,methonds的类型改为double型,将frogjump函数的返回类型也改为double

 double ret = frogjump(n);
public static double frogjump(int x)
 double methonds = 0;

 再次运行青蛙跳
50级台阶的情况,(运行时间依旧很漫长)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值