题目描述:一个楼梯共有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;elsereturn 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);}
(完)