猴子爬山的编程题可以通过递归或动态规划的方法来解决。这里提供一个使用动态规划的Python实现:
```python
def jumpFloor(n):
if n == 1 or n == 2:
return 1
elif n == 3:
return 2
else:
dp = * (n + 1)
dp = 1
dp = 1
dp = 2
for i in range(4, n + 1):
dp[i] = dp[i - 1] + dp[i - 3]
return dp[n]
示例输入
n = int(input("请输入台阶数: "))
示例输出
print("跳法数:", jumpFloor(n))
```
解释
递归方法
基本情况:当台阶数 `n` 小于3时,只有一种跳法(`n=1`)或两种跳法(`n=2`或`n=3`)。
递归情况:对于 `n > 3`,可以从 `n-1` 或 `n-3` 跳上来,因此递归公式为 `f(n) = f(n-1) + f(n-3)`。
动态规划方法
初始化一个长度为 `n+1` 的数组 `dp`,其中 `dp[i]` 表示到达第 `i` 级台阶的跳法数。
设置初始条件:`dp = 1`,`dp = 1`,`dp = 2`。
填充数组:从第4级台阶开始,每一级台阶的跳法数等于前一级台阶和前三级台阶跳法数之和,即 `dp[i] = dp[i-1] + dp[i-3]`。
优化
为了避免递归深度过大,可以使用迭代的方法来实现动态规划:
```python
def jumpFloor(n):
if n == 1 or n == 2:
return 1
elif n == 3:
return 2
else:
dp = * (n + 1)
dp = 1
dp = 1
dp = 2
for i in range(4, n + 1):
dp[i] = dp[i - 1] + dp[i - 3]
return dp[n]
```
这种方法的时间复杂度为 O(n),空间复杂度为 O(n)。通过动态规划,可以有效地计算出猴子爬山的不同跳法数。