求楼梯走法数问题。一个楼梯有n个台阶,上楼可以一步上一个台阶,也可以一步上两个台阶。编写一个实验程序求上楼梯共有多少种不同的走法,求n=47时各种解法的执行时间。c++递归,简单一点
时间: 2024-12-12 18:30:43 浏览: 20
不同路况下正常步态特征研究 (2000年)
求楼梯走法数是一个经典的动态规划问题,通常使用斐波那契数列的思想来解决。这个题目可以用递归或迭代的方式,在C++中实现。这里我们先提供一个基本的递归版本的解决方案:
```cpp
#include <iostream>
using namespace std;
int climbStairs(int n) {
if (n == 0 || n == 1)
return n; // 如果只有一个台阶或没有台阶,只有一种走法
// 一种走法是从前两个台阶走过来的,另一种是从前三个台阶走过来的
return climbStairs(n - 1) + climbStairs(n - 2); // 递归调用
}
int main() {
int n = 47;
cout << "当n=" << n << "时,楼梯的走法有: " << climbStairs(n) << endl;
// 对于性能分析,你可以使用C++的chrono库测量函数执行时间
auto start = chrono::high_resolution_clock::now();
climbStairs(n);
auto end = chrono::high_resolution_clock::now();
double time_spent = chrono::duration_cast<chrono::microseconds>(end - start).count() / 1e6; // 转换为微秒并除以10^6转换为毫秒
cout << "递归解法执行时间为:" << time_spent << "毫秒" << endl;
return 0;
}
```
在这个例子中,`climbStairs(n)`会计算从底层到第n层的不同走法。对于较大的n值,如47,递归可能会导致大量的重复计算,所以效率不高。如果需要更高效的解决方案,可以考虑使用记忆化搜索或迭代方法(比如使用一个数组存储中间结果)。
阅读全文