洛谷递推题目日记.1

66 阅读1分钟

题目描述

楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。

编一个程序,计算共有多少种不同的走法。

输入格式

一个数字,楼梯数。

输出格式

输出走的方式总数。

既然我们可以走以一步或者俩步 那么将问题进行简化的话 我们不是考虑走n阶楼梯有多少走法 而是在走到第n-1或者n-2有多少种走法 因为到了n-1或者n-2的时候 我们只要再走1或者2步就可以了 就这样循环地想下来 这里我们假设走到n阶有f(n)那么f(n)=f(n-1)+f(n-2);而f(n-1)和f(n-2)又可以往下顺延 因此我们不难看出这实际上是一个斐波那契数列 而f(0)=1,f(1)=1所以我们可以写出如下的代码

#include <stdio.h>

int main(){

int a=1,b=1,temp;//这里的a和b分别代表了f(0)和f(1)

for(int i=2//从第2阶开始数;i<=n//确保了我们数的次数没有错;i++){

temp=b;//这里我们把temp的值等价于f(1)

b=a+b;//然后b的值就变成了f(2)

a=temp;//然后我们将f(1)的值赋予a,这样一来a就从f(0)变成了f(1) }

printf("%d",b);//然后我们再输出b的值就可以得到f(n)了

return 0; }

题目有涉及到高精度加法本人比较菜就先不折腾这个了