c++如何实现n阶楼梯问题

每次只能走1阶或2阶,有多少种方法走完
这个问题笔试时经常会问到,使用c++如何实现呢?

https://blog.csdn.net/caoshangpa/article/details/127863180%EF%BC%8C%E8%BF%99%E9%87%8C%E6%9C%89%E4%BD%A0%E6%83%B3%E8%A6%81%E7%9A%84%E7%AD%94%E6%A1%88

该回答引用ChatGPT
楼梯问题是一个经典的递归问题,即一个人每次可以走一阶或两阶,问他到达 n 阶楼梯的方法数。

#include <iostream>

using namespace std;

int stairs(int n)
{
    if (n <= 0)
        return 0;
    else if (n == 1)
        return 1;
    else if (n == 2)
        return 2;
    else
        return stairs(n-1) + stairs(n-2);
}

int main()
{
    int n;
    cout << "Enter the number of stairs: ";
    cin >> n;
    cout << "The number of ways to reach the top is: " << stairs(n) << endl;
    return 0;
}


测试下面代码

1.方法一:采用递归的方式
走到第n阶时可能是从第n-1阶走一步到的,也可能是从n-2阶走两阶到的,设F(n)为走到n阶的种数,则F(n)=F(n-1)+F(n-2)。当n=1时,F(1)=1,n=2时,F(2)=2,这是一个动态规划问题。其实就是一个斐波那契数列。
#include <iostream>
 
long long func(int n)
{
    if(1 == n || 2 == n)
    {
        return n;
    }
    else if(n > 2)
    {
        return func(n - 1) + func(n - 2);
    }
    else
    {
        return -1;  // n 非法
    }
}
 
int main()
{
    std::cout << func(50) << std::endl; // 输出20365011074
    
    system("pause");
    
    return 0;
}
2.方法二:采用非递归的方式
int main()
{
    long long a[90];
    int n = 50;
    a[1] = 1;
    a[2] = 2;
    for(int i = 3; i <= n; i++)
    {
        a[i] = a[i-1]+a[i-2];
    }
 
    std::cout << a[n] <<std::endl; // 输出20365011074
 
    system("pause");
 
    return 0;
}

```c++


```

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^