假设你现在正在爬楼梯,楼梯有 n 级。每次你只能爬 1 级或者 2 级,那么你有多少种方法爬到楼梯的顶部?
输入格式
第一行输入一个整数n(1≤n≤50),代表楼梯的级数。
输出格式
输出爬到楼梯顶部的方法总数。
样例输入
5
样例输出
8
一开始用的递归。。。。n 太大时程序运行超时,
递归:(超时)
#include<stdio.h>
int L(int n,int *count)
{
if(n == 0)
return (*count)++;
if(n < 0)
return (*count);
L(n-1,count);
L(n-2,count);
return *count;
}
int main()
{
int n = 0;
int p = 0;
scanf("%d",&n);
printf("%d",L(n,&p));
return 0;
}
循环:
#include<stdio.h>
int main()
{
int n = 0;
long long f =0;
scanf("%d",&n);
if (n == 1)
f = 1;
else if(n == 2)
f = 2;
else
{
long long old_f = 1;
long long next_old_f = 2;
while(n > 2)
{
f = old_f + next_old_f;
old_f = next_old_f;
next_old_f = f;
n--;
}
}
printf("%lld",f);
return 0;
}