C语言作业,用for循环 从一楼到二楼有20个台阶,人一次只能走一个或两个台阶,从一楼到二楼有多少种走法

急求。。泪奔啦。。。。
2025-02-22 12:09:01
推荐回答(3个)
回答1:

#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

回答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);
}

回答3:

简单分析下:走到第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;
}