请你编写一个C++递归的记忆化的代码:问题描述: 有N阶楼梯,每次可以1步,也可以2步,走完这N阶楼梯有多少种不同方法? 输入描述: 输入个正整数N,表示有多少阶楼梯 输出描述: 输出一个正整数,表示可以有这么多方法 输入样例: 3
时间: 2024-04-17 22:24:58 浏览: 72
以下是一个使用递归和记忆化技术解决楼梯问题的C++代码:
```cpp
#include <iostream>
#include <vector>
std::vector<int> memo; // 用于存储已经计算过的结果
int countWays(int n) {
if (n <= 1) {
return 1; // 当楼梯阶数为0或1时,只有一种方法
}
// 如果结果已经计算过,直接返回存储的值
if (memo[n] != -1) {
return memo[n];
}
// 使用递归计算n-1阶和n-2阶楼梯的方法数之和,并将结果存储起来
memo[n] = countWays(n - 1) + countWays(n - 2);
return memo[n];
}
int main() {
int n;
std::cout << "请输入楼梯阶数: ";
std::cin >> n;
// 初始化记忆化数组,全部设为-1
memo.resize(n + 1, -1);
int ways = countWays(n);
std::cout << "有 " << ways << " 种不同方法" << std::endl;
return 0;
}
```
通过使用记忆化技术,我们可以避免重复计算,提高了程序的效率。希望对你有所帮助!如果还有其他问题,请随时提问。
阅读全文