一个台阶总共有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 }