青蛙跳台阶变态青蛙跳台阶
一、青蛙跳台阶
问题描述:
一只青蛙一次可以跳上1级台阶,也可以一次跳上2级台阶,请问跳上n级台阶,该请娃一共有多少种跳法?
解题思路:
1.如果只有1级台阶,只有一种跳法。
2.如果有2级台阶,只有2种跳法,一种是每次跳1级,跳2次。另一种是一次跳2级。
3.如果台阶级数为n(n>2),第一次跳的时候有2种不同的选择:第一种是第一次跳1级,此时跳法的数目等于后面剩下的n-1级台阶的跳法数目,第二种是第一次跳2级,此时跳法的数目等于后面剩下的n-2级台阶的跳法数目,不难看出这就是斐波那契数列。
因此n(n>2)级台阶的不同跳法的总数为 f(n)=f(n-1)+f(n-2),
斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
代码实现
import java.util.Scanner;
public class JumpFrog {//1.递归方法public static int jumpFrog(int n){if(n == 1 || n == 2 ) return n;elsereturn jumpFrog(n-1)+jumpFrog(n-2);}//2.非递归方法public static int jumpFrog2(int n){if(n == 1 || n == 2) return n;int a1 = 1;int a2 = 2;int ret = 0;for (int i = 3; i <= n; i++) {ret = a1 + a2;a1 = a2;a2 = ret;}return ret;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入台阶数(n,n为正整数):");int n = sc.nextInt();System.out.println("递归青蛙跳"+n+"级台阶共有"+jumpFrog(n)+"种方法!");System.out.println("非递归青蛙跳"+n+"级台阶共有"+jumpFrog2(n)+"种方法!");}
}
运行结果
二、变态青蛙跳台阶
问题描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级台阶,求该青蛙跳上一个n级的台阶总共有多少种跳法?
解题思路
1.如果只有1级台阶,只有一种跳法。
2.如果有2级台阶,只有2种跳法,一种是每次跳1级,跳2次。另一种是一次跳2级。
3.如果台阶级数为n(n>2),可以跳完n阶的情况有:先跳1步,后面还有f(n-1)种跳法;先跳2步,后面还有f(n-2)种跳法。依次类推,先跳出n阶后,后面还有 f(n-n)种跳法,可以得出:
f(n) = f(n-1)+f(n-2)+f(n-3)+…+f(0)
由递推关系可得 f(n) = 2 * f(n-1)
代码实现
import java.util.Scanner;public class JumpFrog_PP {// 递归实现private static int jumpFrog(int target) {if (target == 1 || target == 2) return target;return 2 * jumpFrog(target - 1);}// 非递归public static int jumpFrog2(int target) {if (target == 1 || target == 2) return target;int sum = 1;for (int i = 1; i < target; i++) {sum *= 2;}return sum;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入台阶数(n,n为正整数):");int n = sc.nextInt();System.out.println("递归变态青蛙跳"+n+"级台阶共有"+jumpFrog(n)+"种方法!");System.out.println("非递归变态青蛙跳"+n+"级台阶共有"+jumpFrog2(n)+"种方法!");}
}
运行结果
青蛙跳台阶变态青蛙跳台阶相关推荐
- 斐波那契数列 青蛙跳台阶 变态跳台阶
目录 一.斐波那契数列 二.青蛙跳台阶问题 三.变态跳台阶 一.斐波那契数列 题目:写一个函数,输入n,求斐波那契数列的第n项. 思路:用递归的方法,f(n) =f(n-1) + f(n-2).代码比 ...
- 由递推关系式用差分方程的方法得到通项公式实现求斐波那契数列的第n项;迭代、递归、栈、差分方程之间的本质联系以及由推广的迭代法解决“变态青蛙跳台阶”问题;汉诺塔问题的数字特征以及用递归解决的原理推导。
最近几天在研究算法中一个比较基础且突出的问题,就是关于"递推关系式.递归.迭代.序列前k项和"之间的区别与联系. 一.斐波那契数列与差分方程 首先我们考察一个经典的算法,求斐波那契 ...
- python青蛙跳台阶_Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
前言 跳台阶.变态跳台阶.矩形覆盖其实都和斐波那契数列是一类问题,文中通过示例代码介绍的非常详细,下面话不多说了,来一起看看详细的介绍吧. 跳台阶 问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上 ...
- 【python逻辑算法题】一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法
文章目录 一.题目描述 二.问题分析 三.代码分析与逻辑(python3实现) 四.源码及运行结果 总结 提示:以下是本篇文章正文内容: 一.题目描述 题目:一只青蛙一次可以跳上1级台阶,也可以跳上2 ...
- 一只青蛙一次可以跳上1级台阶也可以跳上2级求该青蛙跳上一个n级的台阶总共有多少种跳法?
一只青蛙一次可以跳上1级台阶也可以跳上2级求该青蛙跳上一个n级的台阶总共有多少种跳法? 解题思路 :每次跳1到n,那么如果是n阶台阶,一次就可能跳1~n阶(话说n=1000,青蛙腿肯定绑火箭了),乍一 ...
- 算法:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 青蛙每一次跳跃只有两种选择:一是再跳1级阶梯到达第n级阶梯,此时小青蛙处于第n-1级阶梯;或者再跳 ...
- 青蛙跳石头java_Java青蛙跳台阶问题的解决思路与代码
问题描述 一只青蛙一次可以跳上1级台阶,也可以一次跳上2级台阶,请问跳上n级台阶,该请娃一共有多少种跳法? 解决思路 ①如果只有1级台阶,那显然只有一种跳法. ②如果有2级台阶,那么就有2种跳法,一种 ...
- 青蛙跳石头java_青蛙跳台阶(JAVA)与递归问题探究
青蛙跳台阶JAVA 一只青蛙一次可以跳上一层台阶,也可以跳上两层,求该青蛙跳上n层的台阶总共有多少种跳法(先后次序不同算不同的结果). 思考:可以看出,每次青蛙出脚都会有两种可能,一步或者两步,再次出 ...
- 【算法题目】有n个台阶,青蛙一次只能跳1步到k步,请问有多少种跳法?
有n个台阶,青蛙一次只能跳1步到k步,请问有多少种跳法? 这个问题是一个经典的爬楼梯问题,可以使用递推方法解决. 设f[i]表示到达第i层台阶的跳法数,那么到达第i层台阶的跳法数可以由从第i-1,i- ...
最新文章
- 聚类算法api初步使用
- mysql数据库管理系统的配置文件是_MySQL学习笔记_1_MySQL数据库管理系统概述
- CString类的用法总结
- USACO-Section1.4 Barn Repair (贪心算法)
- 《FPGA 应用开发入门与典型实例》(修订版)
- php无法查询excel数据,laravel phpexcel无法读取excel中中文表头列数据
- 实现一个进度条的打印
- linux aria2磁力链接,Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看...
- 手机抢答器正在替代传统抢答器
- 世界首富马斯克突然吟了一首中文诗
- 数据结构STL——golang实现前缀基数树radix
- 电商运营流程图模板分享
- Android 手机安装有微信,还是提示未安装微信
- 学会吊打面试官之set
- 多目标应用:多目标蜣螂优化算法求解多旅行商问题(Multiple Traveling Salesman Problem, MTSP)
- 博士毕业论文英文参考文献换行_一文解决中英参考文献混排问题
- I3C协议Single Data Rate(SDR)模式研读(一):总线配置Bus Configuration
- 数字图像处理(1)——绪论
- STM32CubeIDE开发(十六),I2C协议采集传感器数据(SHTC1、LTR-553ALS、BMP280、LSM6DSL、MMC3680KJ)
- csgo删除机器人_《CS:GO》更新移除补位机器人并调整地图和修复bug
热门文章
- FTP bin和ascii的区别
- 主板cpu盖板怎么盖回去
- 复利单利计算0318
- gigaset812说明书_西门子GIASET825电话机说明书.pdf
- C++ string切割,分解字符串,C 库函数 - strtok()
- 可以免费打电话的网站
- 棋盘覆盖问题(分治)
- 解决:VS2010 无法打开“****”,因为此版本的应用程序不支持其项目类型
- 1130. 【NOIP2005PJ】循环
- oracle查询数据令某字段显示固定值