一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
java版本:
public class Solution { public static void main(String[] args){ long startTime=System.currentTimeMillis(); System.out.println("第4项的结果是:"+JumpFloorII(4)); long endTime=System.currentTimeMillis(); System.out.println("程序执行的时间:"+(endTime-startTime)+"ms"); } /*递归*/ public static int JumpFloorII(int target){ if(target==1){ return 1; }else{ return 2*JumpFloorII(target-1); } } /*左移*/ /*public static int JumpFloorII(int target){ int a=1; return a<<(target-1); }*/ }
js版本:
function jumpFloorII(number) { if(number==1){ return number; }else{ return 2*jumpFloorII(number-1); }// write code here }
总结:用递归的思路
第一步可以跳1阶,跳2阶.......可以跳n阶,有n种跳法。
第二步剩余(n-1)个台阶,f(n-1)种跳法。
第三步剩余(n-2)个台阶,f(n-2)种跳法。
所以
f(n)=f(n-1)+f(n-2)+.........f(1)
f(n-1)=f(n-2)+f(n-3)+.........f(1)
两式相减得到发f(n)=2*f(n-1)。
左移思路:
每一项的结果都是上一项的2倍,所以左移1位。
原文地址:https://www.cnblogs.com/yyfyl/p/9409360.html
时间: 2024-10-14 22:32:42