题目描述

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

解题思路

关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:
f(1) = 1
f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。
f(3) = f(3-1) + f(3-2) + f(3-3)

f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(n-(n-1)) + f(n-n)

说明:
1)这里的f(n) 代表的是n个台阶有一次1,2,…n阶的 跳法数。
2)n = 1时,只有1种跳法,f(1) = 1
3) n = 2时,会有两个跳得方式,一次1阶或者2阶,这回归到了问题(1) ,f(2) = f(2-1) + f(2-2)
4) n = 3时,会有三种跳得方式,1阶、2阶、3阶,
那么就是第一次跳出1阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3)
因此结论是f(3) = f(3-1)+f(3-2)+f(3-3)
5) n = n时,会有n中跳的方式,1阶、2阶…n阶,得出结论:
f(n) = f(n-1)+f(n-2)+…+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + … + f(n-1)

6) 由以上已经是一种结论,但是为了简单,我们可以继续简化:
f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)
f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1) = f(n-1) + f(n-1)
可以得出:
f(n) = 2*f(n-1)

7) 得出最终结论,在n阶台阶,一次有1、2、…n阶的跳的方式时,总得跳法为:
| 1 ,(n=0 )
f(n) = | 1 ,(n=1 )
| 2*f(n-1),(n>=2)

代码实现

/*** */
package 递归和循环;/*** <p>* Title:JumpFloorII* </p>* <p>* Description:* </p>* * @author 田茂林* @data 2017年8月23日 上午11:45:07*/
public class JumpFloorII {public int JumpFloor(int target) {if (target < 0) {return -1;} else if (target == 0) {return 1;} else if (target == 1) {return 1;} else {return 2 * JumpFloor(target - 1);}}}

剑指offer_递归与循环---变态跳台阶相关推荐

  1. 剑指offer_递归与循环---跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路 1,用递归,将问题转换为f(n)=f(n-1)+f(n-2); 2,用迭代,原理类似 代 ...

  2. 剑指offer_第8题_跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级. 求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果) 理解 完全蒙啊 那我们就用特例先分析一下 如果有1级台阶,那有1种 如 ...

  3. 牛客网(剑指offer) 第九题 变态跳台阶

    //题目描述 //一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. <?phpfunction jumpFloorII($numbe ...

  4. 剑指offer面试题[9-2]-变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 除了最后一个台阶,其余的台阶都有跳与不跳两种情况. 因此,假设有n个台 ...

  5. 剑指Offer (九):跳台阶问题进阶版(Java版)

    问题,一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这个问题明显是由跳台阶进阶而来,我们由于已经做过跳台阶问题,先进行简单分析. 首先 ...

  6. 剑指Offer - 面试题10- II. 青蛙跳台阶问题

    1. 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008 ...

  7. 剑指offer面试题10- II. 青蛙跳台阶问题(动态规划)(递归)(斐波那契数列)

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...

  8. 牛客网(剑指offer) 第八题 跳台阶

    //题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. <?phpfunction jumpFloor($number) {if($number ...

  9. 7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------剑指offer系列

    题目:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). f(n) = f(n-1) + f(n-2) 基本思路 这道题在剑指offe ...

最新文章

  1. 【分块】#6284. 数列分块入门 8(区间赋值为相同的值,查询区间某值个数)
  2. Excel提取超链接信息
  3. 如何使用:before和:after伪元素?
  4. 设计sample语言的词法分析器_重现木兰编程语言(十)——比较、循环,一个语法设计特色
  5. CentOS 7镜像下载和安装教程
  6. YouTube、微博、今日头条齐齐发力,短视频平台如何打造头部内容、做好用户留存?
  7. linux查看网卡的驱动命令行,Linux下查看网卡驱动和版本信息
  8. 蒙特卡洛法求圆周率 c语言,c++蒙特卡洛法求圆周率
  9. HDU 1083 Courses 匹配
  10. 邮件的常规备份与恢复存储组备份
  11. MacOS下AndroidStudio无法启动
  12. 鸿蒙2.0 134个仓库扼要说明
  13. Java后端实现Excel导出,及添加Excel文件标题样式
  14. mysql教程 check_Check
  15. ECDSA 签名验证原理及C语言实现
  16. html水平线 虚线
  17. 上市前股权激励的方式有哪些
  18. QQ音乐JS逆向爬虫,我用python全都爬!
  19. [文摘201009]演讲录全文:美国世界帝国战略与中国的危机 - 戴旭
  20. create_generated_clock invert preinvert shift_edge是否符合设计真实状态很重要【示例2】

热门文章

  1. excel中用正则匹配_Excel利用正则表达式匹配和替换内容
  2. 算法训练 逗志芃的危机
  3. Android aab的打包、调试、安装
  4. 康普分享未来网络四大趋势 光纤将是最佳主角
  5. 计算机学院职业规划大赛策划书,大学生职业生涯规划大赛策划书(策划书范文).doc...
  6. BAPI创建CLASS和CHARACTERISTICS
  7. Pandas数据分析实战01--Abalone Data Set(鲍鱼数据集)
  8. Linux traceroute no reply
  9. Mac OS X 10.7.5 Lion 系统安装 U 盘制作
  10. 【java8】并行流Stream