1.台阶问题,也是斐波那契数列?
(非递归的方法) f(n)=f(n-1)+f(n-2)
1 | 1 | 1种 | |
2 | 1 1 2 | 2种 | |
3 | 1 2 1 1 1 2 1 | 1+2=3种 | |
4 | 1 1 2 2 2 1 2 1 1 1 1 1 2 1 1 | 2+3=5种 | |
N | f(n-1)+f(n-2) |
//假如有 n 个台阶,一次只能上 1 个台阶,或 者 2 个台阶,请问走到第 n 个台阶
//,有几种走法?可能你不太理解题目,比如假如有 3 个台 阶,
//总计就有 3 中走法,第一种,1,1,1,第二种先上 2 个台阶,
//再上一个台阶,第三种,先 上一个台阶,再上两个台阶
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,first,second,third;
while(scanf("%d",&n)!=EOF)
{
//printf("%d! =%d\n",n,f(n));
first=0;
second=1;
for(i=0;i<n;i++)
{
third=first+second;
first=second;
second=third;
}
printf("%d! =%d\n",n,third);
}
system("pause");
}
(2.)递归方法:
#include <stdio.h>
#include <stdlib.h>
int f(int n)
{
if (1 == n)
{
return 1;
}
if (2 == n)
{
return 2;
}
return f(n - 1) + f(n - 2);
}
int main()
{
int n;
while (scanf("%d\n", &n) != EOF) {
int ret;
ret = f(n);
printf("f(%d)=%d\n",n,ret);
}
return 0;
}