算法疑难(js实现)---5、变态跳台阶
一、总结
一句话总结:
变态跳台阶的递推表达式咋一眼看不是很好写出,我们可以多枚举几个例子,通过例子找规律,从而总结出f(n)
let cache=[,1,2]; function jumpFloor(n) { if(cache[n]!==undefined) return cache[n]; //计算f(n)并返回 cache[n]=1; for (let i=n-1;i>=1;i--){ cache[n]+=jumpFloor(i); } return cache[n]; }
1、找递推表达式常见的两种方式?
1、直接找出f(n)(f(n)的关系非常明显的情况下)
2、多枚举几个例子,通过例子找规律,从而总结出f(n)
二、变态跳台阶
博客对应课程的视频位置:5、变态跳台阶
https://www.fanrenyi.com/video/20/241
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>变态跳台阶</title> 6 </head> 7 <body> 8 <!-- 9 需求: 10 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。 11 求该青蛙跳上一个n级的台阶总共有多少种跳法。 12 13 f(n)来表示青蛙跳上一个n级的台阶跳法种数 14 15 f(n) 16 17 多枚举几个例子,找规律, 18 f(1)=1 19 f(2)=2 20 f(3)=f(2)+f(1)+1 21 f(4)=f(3)+f(2)+f(1)+1 22 f(5)=f(4)+f(3)+f(2)+f(1)+1 23 ... 24 f(n)=f(n-1)+f(n-2)+...+f(2)+f(1)+1 25 26 --> 27 <script> 28 let cache=[,1,2]; 29 function jumpFloor(n) { 30 if(cache[n]!==undefined) return cache[n]; 31 //计算f(n)并返回 32 cache[n]=1; 33 for (let i=n-1;i>=1;i--){ 34 cache[n]+=jumpFloor(i); 35 } 36 return cache[n]; 37 } 38 39 console.log(jumpFloor(10)); 40 console.log(cache); 41 </script> 42 </body> 43 </html>