假设你现在正在爬楼梯,楼梯有n级。每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部?
格式:
第一行输入一个数n,代表楼梯的级数。
接下来一行输出你的方法总数。
样例输入:
5
样例输出:
8
怪自己比较笨,当时第一个想法是用二叉树来做,每个结点的值减去一或二成为它的左右孩子,直到结点值为0为止。可以说我懒把,当时觉得这样一道题要用二叉树来做是不是小题大做了,心里感觉很怪,所以决定还没动手之前再想想有没有什么好的方法——递归。F(n)表示n级台阶的方法种数,F(n) = F(n-1) + F(n-2)。。这不就是Fibonacci数列么。。。那就简单了。。代码如下:
#include<stdio.h>
#include<stdlib.h>
int main(void) {
int n, i;
int *a;
scanf("%d",&n);
a = (int*) malloc ((n+1) * sizeof(int));
if (!a)
return0;
a[0] = 0;
a[1] = 1;
a[2] = 2;
for (i =3; i <= n; i++) {
a[i]= a[i-1] + a[i-2];
}
printf("%d",a[n]);
free(a);
return 0;
}