C语言 代码 递归求解 每次可走1级或2级或3级台阶,n级台阶 有多少种走法?用户输入n表示台阶数,请输出不同走法的数量
时间: 2023-05-31 18:07:59 浏览: 99
问题描述:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。
5星 · 资源好评率100%
这是一个经典的递归问题。可以定义一个递归函数,使用分治思想,将问题分解为规模更小的子问题,直到问题规模足够小,可以直接求解,然后将不同子问题的结果合并。
以下是一个基于递归的解法:
```c
#include <stdio.h>
int countWays(int n) {
if (n == 0 || n == 1) {
return 1; // 只有0级或1级台阶时,只有一种走法
}
else if (n == 2) {
return 2; // 2级台阶时,有两种走法:一步一步走或一步两步走
}
else {
// 对于n级台阶,可以先走1级,剩下的问题转化为(n-1)级台阶的情况;
// 或者先走2级,剩下的问题转化为(n-2)级台阶的情况;
// 或者先走3级,剩下的问题转化为(n-3)级台阶的情况。
// 将三种情况的结果相加,就是n级台阶的总走法数。
return countWays(n-1) + countWays(n-2) + countWays(n-3);
}
}
int main() {
int n;
printf("请输入台阶数:");
scanf("%d", &n);
printf("%d级台阶有%d种不同的走法", n, countWays(n));
return 0;
}
```
这个解法的时间复杂度为O(3^n)。可能随着n的增长而变得非常缓慢。如果要解决更大规模的问题,可以考虑迭代法或动态规划。
阅读全文