一个人爬楼梯,可以每次迈一个台阶,也可以每次迈两个台阶。输入要爬的台阶数,计算一共有多少种不同的走法。要求:递归实现,用C语言写出
时间: 2024-11-03 13:17:49 浏览: 27
这个问题是一个典型的动态规划问题,可以用递归算法来解决。我们设`f(n)`表示到达第`n`级台阶的所有走法总数。如果只走一步,那么只有`f(n-1)`种走法;如果走两步,那么就从`n-2`级开始考虑,有`f(n-2)`种走法。所以总走法就是这两种情况相加。
下面是C语言的递归函数实现:
```c
#include <stdio.h>
int climbStairs(int n) {
if (n == 1 || n == 2) { // 基本情况:1阶和2阶台阶只有一个走法
return n;
} else {
// 递归情况:对于n阶,分为一步走和两步走
return climbStairs(n - 1) + climbStairs(n - 2);
}
}
int main() {
int steps;
printf("请输入你要爬的台阶数:");
scanf("%d", &steps);
printf("到达第%d级台阶的不同走法有 %d 种。\n", steps, climbStairs(steps));
return 0;
}
```
相关问题
一个人爬楼梯,可以每次迈一个台阶,也可以每次迈两个台阶。输入要爬的台阶数,计算一共有多少种不同的走法。要求:递归实现
这个问题属于动态规划中的斐波那契数列问题,可以用递归的方式解决。假设 f(n) 表示到达第 n 个台阶的不同走法数目:
- 如果只爬一个台阶,就只有 1 种走法,即直接一步走,所以 f(1) = 1;
- 如果能一步走一个台阶,也能一步走两个台阶到达 n-1 或者 n-2 个台阶,因此 f(n) = f(n-1) + f(n-2),这对应于“一步一个”和“一步两个”的组合。
递归公式就是这样的:
f(n) = f(n-1) + f(n-2), 对于 n >= 2,初始条件为 f(0) = 0 和 f(1) = 1。
递归函数实现如下(Python语言):
```python
def climb_stairs(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return climb_stairs(n - 2)
# 测试
n = int(input("请输入台阶数:"))
ways = climb_stairs(n)
print(f"有 {ways} 种不同的走法.")
```
小明爬楼梯,台阶数一共十五,每次可以走一个台阶,两个台阶或者三个台阶,走完15层台阶,一共有几种走法 python
小明爬楼梯的问题可以用动态规划的方法解决,这个问题实际上是求解斐波那契数列的变种。我们可以设置一个数组`dp`,其中`dp[i]`表示到达第`i`级台阶的不同走法数。
初始状态为:
- `dp[0] = 1` (走到第一级有1种方式,直接上去)
- `dp[1] = 1` (`dp[0] + dp[1]`,因为可以从一级直接上,也可以从零级跳到一级)
- `dp[2] = 2` (`dp[1] + dp[2]`,因为可以从一级直接上,也可以从零级先到一级再上)
然后对于更大的阶数`i > 2`,`dp[i]`等于前三个有效阶数的组合,即`dp[i - 1] + dp[i - 2] + dp[i - 3]`。
Python代码实现如下:
```python
def climb_stairs(n):
dp = [0] * (n+1)
dp[0], dp[1], dp[2] = 1, 1, 2
for i in range(3, n+1):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
return dp[n]
# 走完15层台阶的不同走法
climb_stairs(15)
```
阅读全文