面試題經典:跳臺階問題
阿新 • • 發佈:2019-01-05
題目:
給定一個有N個臺階的樓梯,一個人從下到上開始跳臺階,這個人有兩種跳的方式:一次跳一個臺階,一次跳兩個臺階;
問:從臺階底端跳到臺階頂端,有多少種跳臺階的方式?
分析:
首先我們考慮最簡單的情況。如果只有1個臺階,那麼顯然只有一種跳法;如果是2級臺階,那麼有2種跳法。對於一個有n級臺階的樓梯來說,我們設跳法為 f(n) ,假如我們先跳1個臺階,則剩下有 n-1 個臺階,跳法為 f(n-1) 次,假如我們先跳2個臺階,則剩下 n-2 階,跳法為 f(n-2);由此可以推出,對於一個n階的樓梯,有以下這個跳臺階的公式:
程式碼如下:
-
#include <iostream>
- usingnamespace std;
- int JumpStep(int n)
- {
- if(n <= 0)
- return -1;
- if(n == 1)
- return 1;
- if(n == 2)
- return 2;
- return JumpStep(n-1)+JumpStep(n-2);
- }
- int main()
- {
- cout<<"5 step jumps : "<<JumpStep(5)<<endl;
-
return
- }
擴充套件:
當跳臺階的選擇多了呢?比如說 每次可以跳3個臺階;按照同樣的方法分析,如下公式:
解題程式碼如下:
- /**
- 題目描述:
- 有N個臺階,一個人從臺階下向上跳臺階,有兩種跳的選擇
- 1次跳一個臺階,1次跳兩個臺階 這兩種選擇;
- */
- #include <iostream>
- usingnamespace std;
- int JumpStep(int n)
- {
- if(n <= 0)
- return -1;
- if(n == 1)
- return 1;
-
if(n == 2)
- return 2;
- return JumpStep(n-1)+JumpStep(n-2);
- }
- int JumpStep3(int n)
- {
- if(n <= 0)
- return -1;
- if(n == 1)
- return 1;
- if(n == 2)
- return 2;
- if(n == 3)
- return 4;
- return JumpStep3(n-1)+JumpStep3(n-2)+JumpStep3(n-3);
- }
- int main()
- {
- cout<<"5 step jumps : "<<JumpStep(5)<<endl;
- cout<<"5 step jumps : "<<JumpStep3(5)<<endl;
- return 0;
- }