一个青蛙,一次只能跳一级台阶,或者跳两级台阶。

问这个青蛙跳上n级台阶有多少种跳法

解析

当青蛙处于第n阶台阶,那吗青蛙就是从 (n-1) 或者从(n-2)的台阶上跳上去的。
那吗(n-1)就是从(n-1-1)处或者从(n-1-2)处跳上来的,这种结构不就是二叉树吗
以青蛙跳上第4级台阶为例会有多少种跳法
解析
当前台阶为第四级台阶
那吗青蛙就是从第3级台阶或者从第2级台阶跳上来的
第一种情况
那吗第3级台阶有可能是从第2级台阶或者第1级台阶跳上来的
那吗第2级台阶是从第1级台阶跳上来的,第二种是第0级台阶这样无意义
第二种情况
那吗第二级台阶是从第一级台阶跳上来的,第二种是第0级台阶这样无意义
用二叉树显示为
image.png
从上图查看有几种情况
从左子树(也就是节点3)开始
第一种情况:1,1,1,1

第一种情况:2,1,1
第三种情况:1,2,1
再从右子树开始(也就是节点2)
第四种情况: 1,1,2
第五种情况:2,2
正确答案就是五种,所以跳上第n级节点的跳法就是左子树的深度加上右子树的深度
公式为 jump(n) = jump(n - 1) + jump(n - 2)

利用代码实现

  1. function jump(n) {
  2. if ( n <= 0 ) return -1;
  3. if ( n == 1 ) return 1;
  4. if ( n == 2 ) return 2;
  5. return jump(n - 1) + jump(n - 2 );
  6. }
  7. console.log(jump(4))