前幾天和家人聊天,無意間聽到了這道題,據說是花廠的面試題,不知真偽,不過今天倒是用C++實作了一下;
乍一看,一千階臺階可能有些懵,但是,不要慌計算機就是重復簡單動作的一個工具,
如果我現在將它改為1階,還未上幼兒園的小朋友可能會毫不猶豫地說有1種走法;
如果我將它改為2階,可能稍微上過幾天幼兒園的同學就會說,有兩種走法,我們可以一下走兩階,或者分兩次走,每次走一階;
如果我將它改為3階,那么一年級的小學生可能需要稍加列舉一下才能分析出到底有多少種走法,請看下面的代碼片:
1 1 1
1 2
2 1
3
細心的你會發現,只有4種是嘛?
是的,沒錯,正是四種;
那么,我們繼續,如果我將題目改為4階臺階呢?我們還需要一一例舉嗎?
NO,那樣的話我們就需要到一年級去回爐重造了;
4階,相當于我們一次走一步的走法種數(乘上)走3階的走法種數,走兩步的走法種數(乘上)走2階走法種數,走三步的走法種數(乘上)走1階的走法種數;
現在我們的問題就清楚了,我們采用了遞回的方法,不斷地呼叫執行緒,來解決問題,這就是一個簡單的所謂的演算法;
演算法,聽起來很高深,其實就是將我們人類的多姿多彩的思維轉化成為(抽象成)計算機可以執行的語言就好了,無非就是簡單機械的判斷和存盤;當然這其中可能會用到一些數學的方法;
下面附上一個21行的簡單的代碼:
#include<iostream>
using namespace std;
int number(int n) {
if (n == 1) {
return 1;
}
else if (n == 2) {
return 2;
}
else if (n == 3) {
return 4;
}
else {
return number(n - 1) + number(n - 2) * 2 + number(n - 3) * 4;
}
}
int main() {
int n = 1000;
cin >> n;//輸入任意的臺階數,當然要考慮到個人計算機的算力,好比1000,一般的輕薄本或商務本的算力肯定是需要很久時間的,可以睡前開始,早晨起來后看結果,嘿嘿
cout << endl << number(n);
}
如果您覺得有用,可以留下個贊哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264149.html
標籤:其他
上一篇:(干貨)資料結構與演算法基礎
