java-青蛙跳台阶问题(递归,迭代)
题目一
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共需要多少种跳法
方法一,用递归
思路
如果只有一级台阶, 一种跳法
如果两级台阶,两种跳法,① 每次跳一级 ② 一次跳两级
如果三级台阶,三种跳法 ① 每次跳一级,跳三次 ② 一次跳两级,一次跳一级 ③ 一次跳一级,一次跳两级
如果是四级台阶, 5种跳法 ① 每次跳一级,跳4次 ,② 两次跳两级 ③每次跳一级,跳两次,一次跳两级,跳一次④ 一次跳一级,一次跳两级,一次跳一级
.....
台阶 | 跳法 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 5 |
5 | 8 |
6 | 13 |
… | … |
根据上面的表格可以看出前两项的和加起来等于后一项,类似于斐波那契数列,n阶台阶时的跳法看成n的函数f(n),f(n)=f(n-1)+f(n-2)
public class Test {static int f(int n) {if(n < 2) {return 1;}return f(n-1)+f(n-2);}public static void main(String[] args) {int n=4;int result =f(n);System.out.println(result);}
}
递归的方法在输入较大的数如 100 ,程序会非常的慢,时间效率低
方法二 迭代
f[3] = f[2] + f[1]
f[4] = f[3] + f[2]
....
每次只需要知道他的 n-1项 和 n - 2 项
public int JumpFloor(int target) {if(target <= 0){return 1;}if(target == 1 || target ==2){return target;}int a1 = 1;int a2 = 2;int temp =0;//定义中间变量for(int i =3; i<= target;i++){temp = a1+a2;a1 = a2;a2 = temp;}return temp;}
题目二
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
示例1
输入
3
返回值
4
思路:
f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(1)
f(n-1)=f(n-2)++f(n-3)+...+f(1)
两个表达式相减
f(n)=2 * f(n-1)
且 f(1) = 1
f(n) = pow(2, n - 1)
public class Solution {public int JumpFloorII(int target) {return (int)Math.pow(2,target -1); }
}
java-青蛙跳台阶问题(递归,迭代)相关推荐
- 剑指 Offer 10- II. 青蛙跳台阶问题 -递归法和数学递推法
剑指 Offer 10- II. 青蛙跳台阶问题 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007), ...
- 青蛙跳石头java_青蛙跳台阶(JAVA)与递归问题探究
青蛙跳台阶JAVA 一只青蛙一次可以跳上一层台阶,也可以跳上两层,求该青蛙跳上n层的台阶总共有多少种跳法(先后次序不同算不同的结果). 思考:可以看出,每次青蛙出脚都会有两种可能,一步或者两步,再次出 ...
- 研究青蛙跳台阶问题区别函数递归与迭代
文章目录 前言 一.什么是青蛙跳台阶问题 二.使用递归和迭代(非递归)的区别 1.递归实现 2.迭代(非递归) 前言 青蛙跳台阶问题是函数递归的经典问题,也是求斐波那契数的变式,通过研究非递归(迭代) ...
- leetcode面试题46. 把数字翻译成字符串/典型的青蛙跳台阶题目(递归),动态规划
文章目录 题目 基本思想 题目 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l&q ...
- 青蛙跳石头java_Java青蛙跳台阶问题的解决思路与代码
问题描述 一只青蛙一次可以跳上1级台阶,也可以一次跳上2级台阶,请问跳上n级台阶,该请娃一共有多少种跳法? 解决思路 ①如果只有1级台阶,那显然只有一种跳法. ②如果有2级台阶,那么就有2种跳法,一种 ...
- 由递推关系式用差分方程的方法得到通项公式实现求斐波那契数列的第n项;迭代、递归、栈、差分方程之间的本质联系以及由推广的迭代法解决“变态青蛙跳台阶”问题;汉诺塔问题的数字特征以及用递归解决的原理推导。
最近几天在研究算法中一个比较基础且突出的问题,就是关于"递推关系式.递归.迭代.序列前k项和"之间的区别与联系. 一.斐波那契数列与差分方程 首先我们考察一个经典的算法,求斐波那契 ...
- 【C递归和迭代】兔子繁殖问题、青蛙跳台阶问题和汉诺塔问题
⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏+留言 ⭐系列专栏:C语言初阶 ⭐代码仓库:C Advanced 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们 ...
- 深度理解递归,手撕经典递归问题(汉诺塔,青蛙跳台阶),保姆级教学。
目录 序言: 一.函数递归( recursion) 二.递归的两个必要条件 三.递归小问题 (1)接受一个整型值(无符号),按照顺序打印它的每一位 (2)编写函数不允许创建临时变量,求字符串的长度(利 ...
- 《LeetCode力扣练习》剑指 Offer 10- II. 青蛙跳台阶问题 Java
<LeetCode力扣练习>剑指 Offer 10- II. 青蛙跳台阶问题 Java 一.资源 题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总 ...
最新文章
- 处有未经处理的异常:0xC0000005 : 读取位置 0x00000000 时发生访问冲突。
- 【学术】直博和读完硕士再读博,在能力上的差距有多大?
- Linux环境下路由表配置一
- 将功补过 树形动态规划
- echarts散点图使用
- java 32 questions
- 【Pytorch神经网络实战案例】11 循环神经网络结构训练语言模型并进行简单预测
- seaJS 模块加载过程分析
- 文本分析软件-智分析 SmartAnalyze
- 应用搬家/应用迁移:c盘搬家哪个软件好?
- 免费的mysql图形化界面_免费好用的MySQL数据库客户端图形界面管理工具
- android开发工具Eclipse Locat如何过滤log
- I.MX6Q(TQIMX6Q)--资料汇总
- 网站底部添加公安备案HTML代码
- 今日头条前端三轮面试面经
- linux 内存查看 kvm,Linux虚拟化KVM-Qemu分析(五)之内存虚拟化
- 评联想收购IBM PC
- HDU2072单词数
- 用户上传用户头像至服务器
- Rhel5.8下载安最新版本的Python3