题目:台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
找到中止条件,然后判断假定是最后一步是定死的,就是一步或者两步,然后等于前面所有方法数之和即可。
即使前面的跳法有很多相同的,只要最后一步是不同的,那么就是不同的
代码
function jumpFloor(number){if(number>3){return jumpFloor(number-1) + jumpFloor(number-2)}else {return number}}
升级版
这次可以跳1-n级台阶,有多少中跳法 ?
代码
思路类似,只是中止条件不同了。另外可以发现,实际每次台阶都是两次选择,可以选择直接跳,也可以选择忽略这个台阶。
function jumpFloorII(number){let sum = 0if(number>2){return 2*jumpFloorII(number-1)}else {return number}}
function jumpFloorII(number){return Math.pow(2,number-1)}
矩形拼接
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?比如n=3时,23的矩形块有3种覆盖方法:

function rectCover(number){if(number<=2){return number}else {return rectCover(number-2)+ rectCover(number-1)}}
当然也可以从前面的算法累加到当前,更节省内存。
function rectCover(number){if(number<=2){return number}else {let prev = 2,prev_2 = 1,temp=0for(let i =2;i<number;i++){temp = prev + prev_2prev_2 = prevprev = temp}return temp}}
