遞歸 上樓梯問(wèn)題

有一段樓梯臺(tái)階有15級(jí)臺(tái)階,以小明的腳力一步最多只能跨3級(jí),請(qǐng)問(wèn)小明登上這段樓梯有多少種不同的走法?

A. 2345

B. 3261

C. 5768

D. 6843

解法:

http://blog.csdn.net/tengxing007/article/details/54882372
https://www.nowcoder.com/questionTerminal/360069ca7225478380ffdcfb7e4b2a2b?


遞歸思想 與 遞歸方法

做遞歸題目遇到這個(gè)問(wèn)題,以為是用遞歸思想解出來(lái)的十电,原來(lái)并不是维雇。只是用遞歸方法實(shí)現(xiàn)計(jì)算,套用斐波那契數(shù)列公式翠拣。網(wǎng)上的很多解法,都是先列舉前面幾個(gè)結(jié)果游盲,發(fā)現(xiàn)正好符合斐波那契數(shù)列規(guī)律误墓,然后再套入遞歸調(diào)用,算出結(jié)果益缎。

個(gè)人認(rèn)為谜慌,這種思想并不好,需要先知道斐波那契數(shù)列莺奔,才能解這道題欣范。

我以為,比較好的利用遞歸思想解題,如下漢諾塔的解題思路恼琼。

http://blog.csdn.net/computerme/article/details/18080511?locationNum=14&fps=1?

設(shè)f(n)為將n片圓盤(pán)所在塔全部移動(dòng)到另一塔最少總次數(shù)妨蛹;由遞歸算法可知:f(1) = 1;當(dāng)n>1時(shí),f(n)? = f(n-1) +1 + f(n-1)晴竞。f(n) = 把上面n-1片圓盤(pán)移動(dòng)到中間塔最少總次數(shù)f(n-1) + 把第n片圓盤(pán)移動(dòng)到目標(biāo)塔+把中間盤(pán)的n-1片圓盤(pán)移動(dòng)到目標(biāo)塔最少總次數(shù)為f(n-1)蛙卤。由數(shù)學(xué)計(jì)算可得:f(n)=2^n-1。(n>0)噩死。


漢諾塔的解題過(guò)程颤难,先得出遞歸公式,再窮舉已维,進(jìn)一步得出最終公式行嗤。-- 遞歸思想

上樓梯問(wèn)題的解題過(guò)程,先窮舉垛耳,得出公式栅屏,用遞歸實(shí)現(xiàn)。 -- 遞歸方法

我這里本來(lái)想自己用遞歸思想來(lái)解題堂鲜,目前看來(lái)不現(xiàn)實(shí)既琴,暫無(wú)解決方案。

結(jié)論:

1泡嘴、斐波那契數(shù)列在生活中由哪些應(yīng)用甫恩?

2、解算法問(wèn)題時(shí)酌予,嘗試看看各個(gè)數(shù)據(jù)之間的關(guān)系磺箕,然后得出公式。


還有一個(gè)笨方法抛虫,把所有排列組合寫(xiě)出來(lái)松靡,選擇其中正好為總階梯數(shù)目的組合,統(tǒng)計(jì)有多少種組合建椰,就有多少種方法正好走完雕欺。以下是代碼,當(dāng)然還有很多可以改進(jìn)的地方棉姐,感覺(jué)意義不大屠列,就不繼續(xù)深究了。

#include "stdafx.h"

#include "stdlib.h"

#include "time.h"

using namespace std;

//#define MAX_TIMES (1073741824)

#define ALL_STAIRS (12)

#define MAX_STEPS (3)

#define MIN_STEPS (1)

void print_time()

{

static time_t t1 = 0,t2 = 0;

struct tm * lt;

if (0 == t1)

{

time (&t1);//獲取Unix時(shí)間戳伞矩。

return;

}

time (&t2);//獲取Unix時(shí)間戳笛洛。

//lt = localtime (&t);//轉(zhuǎn)為時(shí)間結(jié)構(gòu)。

//printf ( "%d/%d/%d %d:%d:%d\n",lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);//輸出結(jié)果

cout << "spend time = " << t2 - t1 << endl;

return;

}

void print_array(int *array, int size)

{

int i = 0;

while (i < size)

{

cout << array[i] << " , ";

i++;

}

cout << "\r\n" << endl;

return;

}

char calc(int * array, int size)

{

int ret = 0;

int sum = 0;

int i = 0;

int invalid_zero = 0;

while ((i < size))

{

if (0 == array[i])

{

invalid_zero = 1;

break;

}

sum += array[i];

i++;

}

while ((i < size))

{

if ((1 == invalid_zero) && (0 != array[i]))

{

return 0;

}

i++;

}

if (ALL_STAIRS == sum)

{

ret = 1;

}

return ret;

}

int add(int * value)

{

int ret = 0;

if (*value == MAX_STEPS)

{

*value = MIN_STEPS;//最少走一步

ret = 1;

}

else

{

(*value)++;

}

return ret;

}

int fullfill(int *array)

{

int i = 0;

int ret = 0;

while ((i < ALL_STAIRS) && add(&array[i]))

{

i++;

}

if (i >= ALL_STAIRS)

{

ret = 1;

}

return ret;

}

int selective_fill(int *array, int min_size, int max_size)

{

int i = 0;

int ret = 0;

while ((i < ALL_STAIRS) && add(&array[i]))

{

i++;

}

if (i >= ALL_STAIRS)

{

ret = 1;

}

return ret;

}

int _tmain(int argc, _TCHAR* argv[])

{

int array[ALL_STAIRS] = {0};

int array_size = sizeof(array)/sizeof(int);

int sum = 0;

int i = 0;

int max_times = ALL_STAIRS;

int min_times = ALL_STAIRS/MAX_STEPS + 1;

int max_calc_times = pow(double(MAX_STEPS+1),double(ALL_STAIRS));

cout << "max_calc_times = " << max_calc_times << endl;

print_time();//計(jì)時(shí)

while (1)

{

if (fullfill(array))

{

break;

}

//if (selective_fill(array, min_times, max_times))

//{

// break;

//}

print_array(array, array_size);

sum += calc(array, array_size);

//最慢的方法乃坤,一步一步走苛让,就可以結(jié)束了

if (array[max_times-1])

{

break;

}

}

cout << "STEPS = " << MIN_STEPS << " ~ "<< MAX_STEPS << endl;

cout << "ALL_STAIRS = " << ALL_STAIRS << endl;

cout << "sum = " << sum << endl;

print_time();//計(jì)時(shí)

system("pause");

return 0;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沟蔑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狱杰,更是在濱河造成了極大的恐慌瘦材,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仿畸,死亡現(xiàn)場(chǎng)離奇詭異宇色,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)颁湖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)例隆,“玉大人甥捺,你說(shuō)我怎么就攤上這事《撇悖” “怎么了镰禾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)唱逢。 經(jīng)常有香客問(wèn)我吴侦,道長(zhǎng),這世上最難降的妖魔是什么坞古? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任备韧,我火速辦了婚禮,結(jié)果婚禮上痪枫,老公的妹妹穿的比我還像新娘织堂。我一直安慰自己,他們只是感情好奶陈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布易阳。 她就那樣靜靜地躺著,像睡著了一般吃粒。 火紅的嫁衣襯著肌膚如雪潦俺。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天徐勃,我揣著相機(jī)與錄音事示,去河邊找鬼。 笑死僻肖,一個(gè)胖子當(dāng)著我的面吹牛很魂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播檐涝,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼遏匆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼法挨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起幅聘,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凡纳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后帝蒿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體荐糜,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年葛超,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了暴氏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绣张,死狀恐怖答渔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侥涵,我是刑警寧澤沼撕,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站芜飘,受9級(jí)特大地震影響务豺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗦明,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一笼沥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娶牌,春花似錦敬拓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至累榜,卻和暖如春营勤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背壹罚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工葛作, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猖凛。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓赂蠢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親辨泳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虱岂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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