N個(gè)臺(tái)階,一次可以走一步或者兩步泡一,求走這N個(gè)臺(tái)階有多少種走法

題目:N個(gè)臺(tái)階颤殴,一次可以走一步或者兩步,求走這N個(gè)臺(tái)階有多少種走法
思路:首先鼻忠,這是一個(gè)斐波那契數(shù)列的應(yīng)用涵但,但是,這里我們不直接給出算法帖蔓,而是給出算法的思路矮瘟。走到第N個(gè)臺(tái)階,要么你是從第N-1層走一步到塑娇,要么你是從第N-2層走兩步到芥永。令走到第N-1層的方法數(shù)是an-1,走到第N-2層的方法數(shù)是an-2钝吮,走到第N層的方法數(shù)是an,我們有an=an-1+an-2,這個(gè)公式是斐波那契數(shù)列的通項(xiàng)公式奇瘦。我們令a1=1,a2=2棘催,使用迭代算法,可以求得an的值耳标。

代碼如下:

#include <iostream>
using namespace std;

int GetNValue(int N)
{
    if (N <= 1) return 1;
    if (N == 2) return 2;

    return GetNValue(N-1) + GetNValue(N-2);
}

int main(int argc, char ** argv)
{
    const int N = 10;

    cout << N << ":" << GetNValue(N) << endl;

    return 0;
}

上述代碼有個(gè)問(wèn)題醇坝,就是我們會(huì)重復(fù)多次求解N-2的問(wèn)題,在求解N-1的時(shí)候次坡,我們會(huì)求解N-2呼猪,在求解N-2的時(shí)候,我們還要求解N-2砸琅,這就出現(xiàn)了重復(fù)宋距,根據(jù)DP的解決思路,我們可以設(shè)置一張表症脂,我們可用查表的方式進(jìn)行求解谚赎。

代碼如下:

#include <iostream>
#include <vector>
using namespace std;

int GetNValue(int N, vector<int> & vecNValue, bool bInit=true)
{
    if (N <= 1) return 1;
    if (N == 2) return 2;

    if (bInit) {
        vecNValue.assign(N, 0);
        vecNValue[0] = 1;
        vecNValue[1] = 2;
    }

    if (vecNValue[N-1] > 0) return vecNValue[N-1];

    vecNValue[N-1] = GetNValue(N-1, vecNValue, false) + GetNValue(N-2, vecNValue, false);

    return vecNValue[N-1];
}

int main(int argc, char ** argv)
{
    const int N = 10;
    vector<int> vecNValue;

    cout << "層數(shù):" << N << endl << "方法數(shù):" << GetNValue(N, vecNValue) << endl;

    return 0;
}

另外,尾遞歸是可以很容易轉(zhuǎn)化成非遞歸的形式的诱篷,讀者自行實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壶唤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棕所,更是在濱河造成了極大的恐慌闸盔,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琳省,死亡現(xiàn)場(chǎng)離奇詭異迎吵,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)岛啸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門钓觉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人坚踩,你說(shuō)我怎么就攤上這事荡灾。” “怎么了瞬铸?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵批幌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嗓节,道長(zhǎng)荧缘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任拦宣,我火速辦了婚禮截粗,結(jié)果婚禮上信姓,老公的妹妹穿的比我還像新娘。我一直安慰自己绸罗,他們只是感情好意推,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著珊蟀,像睡著了一般菊值。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上育灸,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天腻窒,我揣著相機(jī)與錄音,去河邊找鬼磅崭。 笑死儿子,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绽诚。 我是一名探鬼主播典徊,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼恩够!你這毒婦竟也來(lái)了卒落?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蜂桶,失蹤者是張志新(化名)和其女友劉穎儡毕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扑媚,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腰湾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疆股。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片费坊。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖旬痹,靈堂內(nèi)的尸體忽然破棺而出附井,到底是詐尸還是另有隱情,我是刑警寧澤两残,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布永毅,位于F島的核電站,受9級(jí)特大地震影響人弓,放射性物質(zhì)發(fā)生泄漏沼死。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一崔赌、第九天 我趴在偏房一處隱蔽的房頂上張望意蛀。 院中可真熱鬧耸别,春花似錦、人聲如沸浸间。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)魁蒜。三九已至,卻和暖如春吩翻,著一層夾襖步出監(jiān)牢的瞬間兜看,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工狭瞎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留细移,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓熊锭,卻偏偏與公主長(zhǎng)得像弧轧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碗殷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容