#include
int c(int n)
{
if(n==1)return 1;
if(n==2)return 2;
return (c(n-1)+c(n-2));
}
int main()
{
printf("%d",c(20));
}
10946 公式c(n)=c(n-1)+c(n-2),c(1)=1,c(2)=2
分析(设为n个台阶):
第一次走有两种情况:走一步或者两步。
若走一步,则是剩下 n-1个台阶;
若走二步,则是剩下 n-2个台阶;
可以得出是一个递归过程
那么设所求为 f(n);
则: f(n) = f(n-1) + f(n-2);
代码:
#include
int fun(int n)
{
if(n == 0 || n == 1)
return 1;
return fun(n-1) + fun(n-2);
}
void main()
{
int n = 20;
//如果n是由自己输入,换成下面两行
//int n;
//scanf("%d", &n);
int res = fun(n);
printf("%d", res);
}
简单分析下:走到第i阶的方法有两种,从第i-2直接走2阶和从第i-1阶走1阶,所以f(i)=f(i-2)+f(i)
因此该问题可以抽象为斐波那契数列,这样求解就简单多了。
定义一下初始条件,到第一阶的方法f(1)=1; 到第二阶的方法有f(2) = 1 + f(1)=2
所以代码如下:
#include
int main()
{
int n=20;
int i, l, b, r;
for(i=3, l=1, b=2; i<21; i++)
{
r = l + b;
l=b;
b=r;
}
printf("%d\n", r);
return 0;
}