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

急求。。泪奔啦。。。。

第1个回答  2019-07-08
#include<stdio.h>
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个回答  2014-04-12

分析(设为n个台阶):

第一次走有两种情况:走一步或者两步。

若走一步,则是剩下 n-1个台阶;

若走二步,则是剩下 n-2个台阶;

可以得出是一个递归过程

那么设所求为 f(n);

则: f(n) = f(n-1) + f(n-2);

代码:

#include<stdio.h>
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);
}

追问

我大一,没有学到这么复杂的内容,我们老师只是要求我们用for 循环

追答#include<stdio.h>
void main()
{
int n = 20; 
//如果n是由自己输入,换成下面两行
//int n;
//scanf("%d", &n);
int f0 = 1, f1 = 1, f2;
for(int i = 2; i <= n; i++)
{
f2 = f0 + f1;
f0 = f1;
f1 = f2;
}
printf("%d", f2);
}

第3个回答  2014-04-12

简单分析下:走到第i阶的方法有两种,从第i-2直接走2阶和从第i-1阶走1阶,所以f(i)=f(i-2)+f(i)

因此该问题可以抽象为斐波那契数列,这样求解就简单多了。

定义一下初始条件,到第一阶的方法f(1)=1; 到第二阶的方法有f(2) = 1 + f(1)=2

所以代码如下:

#include<stdio.h>
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;
}

本回答被提问者采纳
相似回答