中易网

楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,用C++或lua语言编一程序计算共有多少种不同的走法

答案:3  悬赏:40  
解决时间 2021-01-19 09:32
楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,用C++或lua语言编一程序计算共有多少种不同的走法
最佳答案
int recursive(int n)
{  
    if (n <= 2)
        return n;
    return recursive(n - 1) + 2 * recursive(n - 2);
}


int iterative(int n)
{  
    int f1 = 1, f2 = 2, f;  
    for (int i = 3; i <= n; ++i) 
    {  
        f = f2 + 2 * f1;  
        f1 = f2; 
        f2 = f; 
    }  
    return f;   
}追问2 * recursive(n - 2);
这里为什么要乘2?好像不用吧,直接return f(n-1)+f(n-2)就行了吧追答是不用乘2,你理解是对的。我想偏了。

更改为:
int recursive(int n)
{
if (n <= 2)
return n;
return recursive(n - 1) + recursive(n - 2);
}

int iterative(int n)
{
int f1 = 1, f2 = 2, f;
for (int i = 3; i <= n; ++i)
{
f = f2 + f1;
f1 = f2;
f2 = f;
}
return f;
}
全部回答
C语言版本:
#include
int jiecheng(int x,int ci)
{
int i=0,p=1;
while(i++p*=x--;
return p;
}
int main()
{
int i,n,sum=0;
printf("请输入台阶数量n:");
scanf("%d",&n);
for(i=1;i<=n/2;i++)
sum+=jiecheng(n-i,i)/jiecheng(i,i);
printf("总共有%d种方案\n",sum+1);
return 0;
}
#include
#define maxn 50
int arr[maxn];
int main(void)
{
    arr[0] = arr[1] = 1;
    int i;
    for(i = 2; i < maxn; i++)
        arr[i] = arr[i - 1] + arr[i - 2];
    return 0;
}追问这是迭代的方法?还有递归的方法是该这样吗:
int f(int n)
{
if (n <= 0)
return 0;
else if (n == 1)
return 1;
else if (n == 2)
return 2;
else
return f(n-1)+f(n-2);
}追答是。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
带虎和鸟的成语有哪些
三菱柱ABC-A 1 B 1 C 1 中,底面边长和侧棱长
左顾右盼的顾能组什么词
发源地金华NO.3地址在哪,我要去那里办事
猫发现离它10步远前有一只奔跑的老鼠,便追。
纯钛和钛合金牙冠的价格各是多少
自驾由延吉到鸡西怎么走?
2x_3分之2(x+3)=负x+3
茂名到永州高速多少公里
求解:浮沉子的工作原理
宏鑫五金电料水暖电动工具批发怎么去啊,我要
我们是外县的,孩子现在在外县上学,人家每年
1个9,比10少1,是多少
世界杯比赛中,获得过冠军最多的是哪l个国家
什么是好户型 挑选户型八大忌
推荐资讯
为什么SKT的替补上来都这么猛
东盟国家进口减免税办理
穿越到红楼梦时代的小说.
依次将10个数输入,要求将其中最大的输出。
小男孩穿丁字裤图有吗
用甚至的甚怎么组词
结合文章内容,说说什么是"泛娱乐化".简述第
毒誓是什么意思?
天姿美容美发连锁机构地址在什么地方,我要处
win7鼠标禁用后怎么打开
襄阳内环西路和中原西路的绿地中央广场属于哪
飞机票火车票地址有知道的么?有点事想过去
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?