上楼梯递归问题

时间限制: 1000 ms  空间限制: 262144 KB

题目描述 

  楼梯有N级台阶,上楼可以一步上一级台阶,也可以一步上两级台阶。编一程序,计算共有多少种不同的走法。

输入

  一行,一个整数n(1 <= n <= 30),表示台阶的级数

输出

  一个整数,走法的种数。

样例输入

3
样例输出

3
方案1:走三次,每次一步
方案2:先走一级,再走两级
方案3:先走两级,再走一次


为什么是斐波拉契数列

因为你要上n阶楼梯 只有 上f(n-1) 那上一步,或者从f(n-2)那上两步

所以这样就构成了递归式。

#include <stdio.h>  
  
typedef unsigned long long ULL;  
  
ULL stairs(int n)  
{  
    ULL f1=1, f2=2, temp;  
  
    if(n == 0)  
        return 0;  
    else if(n == 1)  
        return 1;  
    else if(n == 2)  
        return 2;  
  
    for(int i=3; i<=n; i++) {  
        temp = f1 + f2;  
        f1 = f2;  
        f2 = temp;  
    }  
  
    return f2;  
}  
  
int main(void)  
{  
    int n;  
  
    scanf("%d", &n);  
  
    printf("%lld\n", stairs(n));  
  
    return 0;  
}  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值