Java解决青蛙跳台阶问题流程

 更新时间:2022年03月15日 14:36:28   作者:K稳重  
所谓的青蛙跳台阶问题,就是指一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。本文将用Java解决这一问题,需要的可以参考一下

1.问题描述

一只青蛙一次可以跳上1阶台阶,也可以跳上2阶台阶,求该青蛙跳上一个n阶台阶总共有多少种跳法?

2.画图分析 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

3.问题讲解 

一只青蛙,要么1次跳2个台阶,要么1次跳1个台阶。

假设3个台阶为例:如果1次跳1个台阶,那剩下几种跳法?我们来仔细地想一下:

跳了一个台阶之后,剩下的台阶就相当于3 -1个台阶剩下2个台阶,2个台阶的跳法如上图就是2种跳法。

如果一次跳2个台阶,剩下的台阶就相当于3 - 2个台阶剩下1个台阶,1个台阶的跳法如上图是1种跳法。那么加起来就是3种跳法。

所以说,你如果想知道n个台阶有多少种跳法,其实就是看n - 1个台阶有多少种跳法,加上n - 2个台阶有多少种跳法。

规律看懂后你就发现这其实就是一个变相的斐波那契数列,只不过这个数列的第一项是1,第二项是2.

4.代码设计思路

我们再来看一下斐波那契数列的写法:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

唯一的不同就是斐波那契数列的前两个项都是1

而青蛙跳台的第一项为1,第二项为2

只要用递归的方法稍作改动就能求出我们青蛙跳台阶的问题

5.实现代码 

public class TestDemo {
    public static int frogJump(int n){
        if(n == 1 || n == 2){   //当n为前2阶台阶的时候,n是几就是几
            return n;
        }else{
            return frogJump(n-2)+frogJump(n-1);//求n阶台阶的几种跳法
        }
    }
 
 
    public static void main(String[] args) {
        System.out.println(frogJump(1));
        System.out.println(frogJump(2));
        System.out.println(frogJump(3));
        System.out.println(frogJump(4));
 
    }
}

打印结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

6.代码升级

用递归的方式虽然可以求解青蛙跳台阶问题,但是这其中会进行大量重复的计算。如果求的数字过大,程序运算出结果花费的时间会非常的长,所以我们并不建议在面试出现这样的问题的时候用递归的方法求解。

这里给大家介绍一种更好的求解方式:循环(迭代)实现 

画图分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

给大家解释一下上图: 

开始f3 = 3,f2 = 2,f1 = 1,

我们先让f3 = f1 + f2,这么没问题吧,1+2=3

再来我们把f2的值赋给f1,此时f1就等于2,

再把f3的值赋给f2,此时f2的值就等于3

循环起来,那此时再求f3的值就是2+3=5,恰好就是我们4阶台阶的5种跳法。

代码实现:

第二种写法:循环(迭代)实现 
public class TestDemo {
    public static int frogJump2(int n){
        if(n == 1 || n==2){
            return n;
        }
        int f1 = 1;
        int f2 = 2;
        int f3 = 0;
        for (int i = 3; i <= n; i++) {
            f3 = f1+f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
 
    }
    public static void main(String[] args) {
        System.out.println(frogJump2(1));
        System.out.println(frogJump2(2));
        System.out.println(frogJump2(3));
        System.out.println(frogJump2(4));
        System.out.println(frogJump2(5));
        System.out.println(frogJump2(45));
 
    }
}

运行结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

到此这篇关于Java解决青蛙跳台阶问题流程的文章就介绍到这了,更多相关Java 青蛙跳台阶内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Java实现ssh命令登录主机执行shell命令过程解析

    基于Java实现ssh命令登录主机执行shell命令过程解析

    这篇文章主要介绍了基于Java实现ssh命令登录主机执行shell命令过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • windows下java环境变量的设置方法

    windows下java环境变量的设置方法

    在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”
    2013-09-09
  • java实现文件切片上传百度云+断点续传的方法

    java实现文件切片上传百度云+断点续传的方法

    文件续传在很多地方都可以用的到,本文主要介绍了java实现文件切片上传百度云+断点续传的方法, 文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 一文搞懂Java中的日期类

    一文搞懂Java中的日期类

    在程序的开发中我们经常会遇到日期类型的操作,Java对日期类型的操作提供了很好的支持。本文将通过示例来聊聊Java中日期类的使用,需要的可以参考一下
    2022-09-09
  • SpringBoot中定义Bean的方法总结

    SpringBoot中定义Bean的方法总结

    在Spring Boot应用程序中,定义Bean是非常常见的操作,它是构建应用程序的基础,pring Boot提供了多种方式来定义Bean,每种方式都有其适用的场景和优势,本文将介绍Spring Boot中定义Bean的几种常见方式,需要的朋友可以参考下
    2023-12-12
  • IDEA插件之彩虹括号Rainbow Brackets使用介绍

    IDEA插件之彩虹括号Rainbow Brackets使用介绍

    这篇文章主要为大家介绍了IDEA插件之彩虹括号Rainbow Brackets使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 基于字符串常用API(详解)

    基于字符串常用API(详解)

    下面小编就为大家带来一篇基于字符串常用API(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • JDK17在Windows安装及环境变量配置超详细的教程

    JDK17在Windows安装及环境变量配置超详细的教程

    这篇文章主要介绍了JDK17在Windows安装及环境变量配置超详细的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • Mybatis中使用in()查询的方式详解

    Mybatis中使用in()查询的方式详解

    当参数有值,添加条件查询,附带一个字符串的in查询,下面这篇文章主要给大家介绍了关于Mybatis中使用in()查询的方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • mybatis-4 mybatis与spring结合使用及原理解析

    mybatis-4 mybatis与spring结合使用及原理解析

    本文通过图文并茂的形式给大家介绍了mybatis-4 mybatis与spring结合使用及原理解析,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04

最新评论