老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。#include <iostream> using namespace std; int walk(int n) { if(n==1) return 1; else if(n==2) return 2; else return walk(n-1)+walk(n-2); } int main() { int n; while (cin >>n) { cout<<walk(n)<<endl; } return 0; }分析代码
时间: 2024-02-05 19:03:33 浏览: 208
#include_iostream.h_
4星 · 用户满意度95%
这段代码使用递归的方式来求解爬楼梯的不同走法数。函数 `walk` 的参数 `n` 表示楼梯的级数,函数返回值表示在爬楼梯时不同的走法数。当楼梯级数为1时,只有一种走法,即直接走1级;当楼梯级数为2时,有两种走法,即直接走2级或者先走1级再走1级。当楼梯级数大于2时,可以从第 n-1 个台阶走一步到第 n 个台阶,也可以从第 n-2 个台阶走两步到第 n 个台阶,因此有 `walk(n-1)+walk(n-2)` 种不同的走法。这个递归过程会一直进行下去,直到楼梯级数为1或2时,递归终止。该代码的时间复杂度为O(2^n),在楼梯级数很大时会出现栈溢出的问题。可以使用动态规划或者记忆化搜索的方式来优化这个算法,减小时间复杂度。
阅读全文