青蛙跳台阶衍生之变态跳台阶(递归,思路分析及代码实现)
2017-07-21 00:18
417 查看
//一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 //思路: 接上一个跳台阶问题思路继续分析,上个问题中,青蛙只能跳1级或者2级。 则最后一跳只有两种可能,所以F(n) = F(n-1) + F(n-2) //现在青蛙可以跳n级。 假设台阶为n级,则青蛙可以 跳一次或者多次。 一次: 直接跳n级,这是一种方法。 多次: 青蛙跳到 1到n-1级 任一级(不管怎样跳,跳几次)后再跳一次到n级。 //或者这样分析,青蛙最后一跳,有可能是从起点直接跳到终点,或者从起点跳了若干步后(到达 1到n-1级中间任一级 )再跳到n级。 //所以总的方法数为:青蛙 跳到 1级到n-1级 每级可能的方法数(再跳到n级) + 1(直接跳到n级) //F(n) = F(n-1) + F(n-2) + ... + F(1) + 1; //可得: F(n-1) = F(n-2) + F(n-3) +..._F(1) + 1; //则F(n) = F(n-1) + F(n-1) //即F(n) = 2F(n-1) //其实这个题和上个题这种类型题这么分析反而麻烦了。 //如果是笔试遇到这种题, 我们完全可以 把前面几次情况列出来后,观察出数字之间的规律, 直接按规律写函数 //而不用像上面这样去分析。 但是按照我们的分析虽然费时得出的答案一定是正确的,找规律得出的答案就不一定正确了。所以还是根据自己拥有时间选择吧。 //面试时先按找到的规律写出函数,告诉面试官你发现的规律。如果面试官还要你从逻辑角度陈述你的代码,再按上面的思路分析也不迟 int jumpFloorII(int number) { if ( number <= 0 ) return 0; if ( 1 == number ) return 1; return 2 * jumpFloorII( number-1 ); }
相关文章推荐
- n个2*1小矩形无重叠覆盖2*n大矩形(递归,思路分析及代码实现,斐波那契数列衍生)
- 跳台阶,变态跳台阶,矩形覆盖 代码实现
- 用两种方法(递归和DP)实现了青蛙跳台阶
- 用js写“算24”游戏的思路分析与实现代码
- 汇编语言实现递归阶乘算法代码分析(8)
- 变态青蛙跳台阶的两种典型分析方法
- 【JS 设计模式 】用组合模式来实现树形导航--代码结构思路分析(一)
- 《剑指offer2》问题10 青蛙跳台阶&&变态跳台阶 Java实现
- 斐波那契数列衍生之 求青蛙跳上n级台阶的 跳法数(递归)
- 用js写“算24”游戏的思路分析与实现代码
- 非递归实现二叉树遍历(思路+代码)
- 青蛙跳台阶问题的递归思路
- jQuery判断密码强度实现思路及代码
- js实现点小图看大图效果的思路及示例代码
- jquery 页眉单行信息滚动显示实现思路及代码
- PHP实现自动登陆的思路分析
- Java NIO原理图文分析及代码实现
- Java NIO原理图文分析及代码实现
- ItemCF_基于物品的协同过滤_MapReduceJava代码实现思路
- Android 获取Root权限之后的静默安装实现 代码示例分析&&源码下载