阿牧路泽

哪有那么多坚强,无非是死扛罢了
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

12、【常见算法】跳台阶问题

Posted on 2018-10-16 11:45  阿牧路泽  阅读(652)  评论(0编辑  收藏  举报

一个台阶总共有n级,如果一次可以跳1级,也可以跳2级,求总共有多少种跳法。

问题分析:

1 f(n) = f(n-1)= 1 n=1 
2 f(n) = 1+1 = 2 n=2 当第一次跳一个台阶时,有一种方法,当第一次跳两个台阶时有一种方法 
3 f(n) = 2+1 =3 n=3 当第一次跳一个台阶时有f(3-1)中方法,当第一次跳两个台阶时有f(3-2)中方法 
4 因此,
5 f(n) = f(n-1)+f(n-2) n>2 
 1 //跳台阶问题
 2 /**
 3     一个台阶总共有n级,如果一次可以跳1级,也可以跳2级,求总共有多少种跳法。
 4 */
 5 
 6 #include <iostream>
 7 
 8 
 9 using namespace std;
10 
11 #define NUM 2
12 int steps[NUM] = {1, 2};
13 
14 
15 int calPermNum(int num)
16 {
17     if(num == 1)
18         return 1;
19     else if(num == 2)
20         return 2;
21     else
22         return calPermNum(num -1) + calPermNum(num - 2);
23 }
24 
25 int main()
26 {
27     cout << calPermNum(3) << endl;
28     return 0;
29 }

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

 1 f(n) =f(n-1)= 1 n=1 
 2 
 3 f(n) = 1+1 = 2 n=2 当第一次跳一个台阶时,有一种方法,当第一次跳两个台阶时有一种方法 
 4 
 5 f(n) = 2+1 =3 n=3 当第一次跳一个台阶时有f(3-1)种方法,当第一次跳两个台阶时有f(3-2)种方法,当第一次跳3个台阶时有1种跳法 
 6 
 7 因此 
 8 
 9 f(n) = f(n-1)+f(n-2)+......f(1)+1种跳法
10 f(n-1) = f(n-2)+f(n-3)+.....f(1)+1
11 f(n)-f(n-1)=f(n-1)
12 所以f(n) = 2*f(n-1)  n>2 
 1 //跳台阶2
 2 //一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
 3 #include <iostream>
 4 
 5 using namespace std;
 6 
 7 #define NUM 2
 8 int steps[NUM] = {1, 2};
 9 
10 
11 int calPermNum(int num)
12 {
13     if(num == 1)
14         return 1;
15     else if(num == 2)
16         return 2;
17     else
18         return 2*calPermNum(num-1);
19 }
20 
21 int main()
22 {
23     cout << calPermNum(5) << endl;
24     return 0;
25 }