描述ios
已知一个楼梯有n级,小谢同窗从下往上走,一步能够走一级,也能够走两级。问:他走到第n级楼梯有多少种走法?函数
输入flex
一行一个正整数n,1≤n≤40。spa
输出code
一行一个整数,表示走到第n级有多少种走法。blog
输入样例 1 ci
9
输出样例 1input
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 }
因为题目要求用自定义函数来解答,因此咱们还要把它改为自定义函数的形式。it
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 }