描述
已知一个楼梯有n级,小谢同学从下往上走,一步可以走一级,也可以走两级。问:他走到第n级楼梯有多少种走法?
输入
一行一个正整数n,1≤n≤40。
输出
一行一个整数,表示走到第n级有多少种走法。
输入样例 1
9
输出样例 1
55
这道题一上手时,我相信大多数人都会第一时间想到用递推来解。
但是那样做题的效率较低,方法也相对复杂,不太适合刚入门C++的新手。
我使用的这个方法是源自曾经刷过的一个小升初的原题。
我们从1开始。
楼梯级数 | 可采用方法数 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 5 |
5 | 8 |
从表格可以看得出来,随着楼梯级数的增加,可采用方法数也随之增加。
增加的规律就十分眼熟了,可以看得出来增加的规律遵循着斐波那契数列的规则。
得出这个结论后,这一题就非常简单了。我们可以写一个非常简单的求斐波那契第n项的程序,就可以做出这道题了。
代码:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int a,b,c,k; 6 cin>>k; 7 a=1; 8 b=1; 9 for(int i=3;i<=k+1;i++) 10 { 11 c=a+b; 12 a=b; 13 b=c; 14 } 15 cout<<b; 16 return 0; 17 }
由于题目要求用自定义函数来解答,所以我们还要把它改成自定义函数的形式。
1 #include<iostream> 2 using namespace std; 3 void louti(int k) 4 { 5 int a=1,b=1,c; 6 for(int i=3;i<=k+1;i++) 7 { 8 c=a+b; 9 a=b; 10 b=c; 11 } 12 cout<<b; 13 } 14 int main() 15 { 16 int a,b,c,k; 17 cin>>k; 18 louti(k); 19 return 0; 20 }