C 在20层限制条件下爬n级楼梯的可能性

C 在20层限制条件下爬n级楼梯的可能性,c,recursion,fibonacci,C,Recursion,Fibonacci,我正在解决一个递归问题,其中函数int stairs(int n)返回爬楼梯到n的可能性数量,条件是走1步或2步。 下面的代码解决了这个问题: int stairs(int n) { if (n<0) return 0; if (n==0) return 1; return stairs(n-1) + stairs(n-2); } int楼梯(int n) { 如果(n当n>20时 您可以先到达20楼,然后一直往上走=>楼梯(20) 您也可以到达19楼,然后前往21楼

我正在解决一个递归问题,其中函数int stairs(int n)返回爬楼梯到n的可能性数量,条件是走1步或2步。 下面的代码解决了这个问题:

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

如果(n当
n>20

  • 您可以先到达20楼,然后一直往上走=>
    楼梯(20)

  • 您也可以到达19楼,然后前往21楼,从21楼,您有
    楼梯(n-21)
    通往n楼的路,所以=>
    楼梯(19)*楼梯(n-21)

所以总结起来就是
楼梯(20)+楼梯(19)*楼梯(n-21)


您可以使用动态规划来避免计算相同的值。

基本递归方案如下所示

int stairs(unsigned int n) {
    if (n < 2)
        return 1;
    return stairs(n-1) + stairs(n-2);
}

“一直到n层。”-什么是n?问问自己:哪些层有特殊的规则?然后为它们编写逻辑。注意:
int
不能存储这么大的值。记住,这是斐波那契序列。最好将结果存储在数组中,而不是反复计算:
stairs[n]=stairs[n-2]+楼梯[n-1];
等等。非常感谢!明白了。欢迎光临,但您最好将计算结果存储起来。
int stairs(unsigned int n) {
    if (n < 2)
        return 1;
    return stairs(n-1) + stairs(n-2);
}
int stairs20(unsigned int n) {
    if(n > 20) {
        return stairs(20) + stairs(19)*stairs(n-21);
    } else {
        return stairs(n);
    }
}