標籤:name std main 方法 code color space ... str
一個台階總共有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 212 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 else22 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)+111 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 else18 return 2*calPermNum(num-1);19 }20 21 int main()22 {23 cout << calPermNum(5) << endl;24 return 0;25 }
跳台階問題