题目描述:一个楼梯共有n个台阶,一次只能走1个,或2个台阶,走到完n个台阶有多少种走法?
先从简单入手:
1个台阶 有一种走法; (1)
2个台阶 有两种走法: (1, 1) (2)
3个台阶 有三种走法: (1,1,1) (1,2) (2,1)
4个台阶 有五种走法: (1,1,1,1) (1,2,1) (2,1,1)(1,1,2)(2,2)
…………
n个台阶: f(n)=f(n-1)+f(n-2)
递归解决:
#include <stdio.h>
int step(int n)
{
if(n==1)
return 1;
else if(n==2)
return 2;
else
return step(n-1)+step(n-2);
}
int main()
{
int n;
scanf("%d", &n);
printf("共有%d种方法\n", step(n));
}
非递归解法:
#include <stdio.h>
int main()
{
int n, i, sum=0, step1=1, step2=2;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
if(i==1)
sum=step1;
else if(i==2)
sum=step2;
else
{
sum=step1+step2;
step1=step2;
step2=sum;
}
}
printf("共有%d种方法\n", sum);
}
(完)