【前端】自学基础算法 -- 23.动态规划-青蛙跳台阶

动态规划-青蛙跳台阶

青蛙跳台阶
一只青蛙,一次只能跳一级台阶,或者两级台阶
问:这只青蛙跳上n级台阶,有多少种跳法

递推关系:
如果这只青蛙,跳上了n级台阶,那么最后一次跳跃之前,它一定在n-1级台阶,或者n-2级台阶;
那么跳上n级台阶有多少种情况,就变成了2个子问题:

  1. 跳上n-1级台阶的跳法 + 2. 跳上n-2级台阶的跳法

以此类推,跳上n-1级台阶的跳法,又变成了2个子问题:

  1. 跳上n-2级台阶的跳法 + 2. 跳上n-3级台阶的跳法

实现方法

就是使用斐波那契数列方法实现

/**
 * 青蛙跳台阶
 * 一只青蛙,一次只能跳一级台阶,或者两级台阶
 * 问:这只青蛙跳上n级台阶,有多少种跳法
 */

// 如果这只青蛙,跳上了n级台阶,那么最后一次跳跃之前,它一定在n-1级台阶,或者n-2级台阶
// 那么跳上n级台阶有多少种情况,就变成了2个子问题
// 1. 跳上n-1级台阶的跳法 + 2. 跳上n-2级台阶的跳法

// 以此类推,跳上n-1级台阶的跳法,又变成了2个子问题
// 1. 跳上n-2级台阶的跳法 + 2. 跳上n-3级台阶的跳法

// f(n) = f(n-1) + f(n-2)

function jump(n) {
  if (n <= 0) return -1
  if (n == 1) return 1
  if (n === 2) return 2

  return jump(n - 1) + jump(n - 2)
}

console.log(jump(2)) // 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值