【數(shù)據(jù)結(jié)構(gòu)】遞歸和分治思想之遞歸

斐波那契數(shù)列的實現(xiàn)

斐波那契問題介紹

如果一對兔子在出生兩個月后,就有繁殖能力,一對兔子每個月能生出一對小兔子來泉哈。假設(shè)所有兔子都不死,那么一年后可以繁殖多少對兔子破讨?

分析
所經(jīng)過的月數(shù) 1 2 3 4 5 6 7 8 9 10 11 12
兔子對數(shù) 1 1 2 3 5 8 13 21 34 55 89 144

表中的數(shù)字1丛晦,1,2提陶,3烫沙,5,8隙笆,13...構(gòu)成了一個序列斧吐,這個序列的特點是:前面兩個相鄰項之和 = 后一項.

用常規(guī)的迭代來實現(xiàn)
int main(int argc, const char * argv[]) {    
    int i;
    int a[12];
    a[0] = 0;
    a[1] = 1;
    printf("%d ",a[0]);
    printf("%d ",a[1]);
    
    for (i = 2; i<13; i++) {
        a[i] = a[i-1]+a[i-2];
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}
輸出結(jié)果
用遞歸來實現(xiàn)
#include <stdio.h>

/**
 * 斐波那契遞歸函數(shù)
 */
int Fib(int i){
    
    if (i < 2)
        return i == 0 ? 0 : 1;
    return Fib(i - 1) + Fib(i - 2); // 這里Fib就是函數(shù)自己又固,它在自己調(diào)用自己
}

int main(int argc, const char * argv[]) {
    
    for (int i = 0; i < 40; i++) {
        printf("%d ", Fib(i));
    }
    printf("\n");
    return 0;
}

同樣的問題用遞歸來實現(xiàn),代碼很簡潔煤率。不過對于遞歸的理解有點費腦仰冠!
遞歸就是在函數(shù)中調(diào)用該函數(shù)本身的函數(shù)。
對于遞歸可以這樣理解:不用把一個遞歸函數(shù)中調(diào)用自己的函數(shù)看作是在調(diào)用自己蝶糯,而就當它是在調(diào)用另個一函數(shù)洋只,只不過這個函數(shù)和自己長的一樣。

遞歸

遞歸定義

一個直接調(diào)用自己或者通過一些列的語句間接調(diào)用自己的函數(shù)叫做遞歸函數(shù)昼捍。

遞歸注意點
  • 每個遞歸定義必須至少有一個條件识虚,滿足時遞歸不再進行,即不再引用自身而是返回值退出妒茬。
  • 遞歸使用的是選擇結(jié)構(gòu)担锤,迭代使用的是循環(huán)結(jié)構(gòu)。(這是迭代和遞歸的區(qū)別)
  • 雖然遞歸是結(jié)構(gòu)更清晰簡潔乍钻,但是大量的遞歸調(diào)用會建立函數(shù)副本肛循,會消耗大量的時間和內(nèi)存

遞歸的使用舉例

1.求n的階乘

int factorial(int n){
    if (n == 0)
        return 1;
    else
        return n * factorial(n - 1);
}

2.將輸入的任意長度的字符串反向輸出银择。以#作為輸入結(jié)束標志多糠。例如輸入字符串ABC,反向輸出字符串CBA浩考。

void printC(){
    char a;
    scanf("%c", &a);
    
    if (a != '#') printC(); // 遞歸調(diào)用
    if (a != '#') printf("%c", a); // 回退輸出
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夹孔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子析孽,更是在濱河造成了極大的恐慌搭伤,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袜瞬,死亡現(xiàn)場離奇詭異闷畸,居然都是意外死亡,警方通過查閱死者的電腦和手機吞滞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門佑菩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人裁赠,你說我怎么就攤上這事殿漠。” “怎么了佩捞?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵绞幌,是天一觀的道長。 經(jīng)常有香客問我一忱,道長莲蜘,這世上最難降的妖魔是什么谭确? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮票渠,結(jié)果婚禮上逐哈,老公的妹妹穿的比我還像新娘。我一直安慰自己问顷,他們只是感情好昂秃,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杜窄,像睡著了一般肠骆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塞耕,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天蚀腿,我揣著相機與錄音,去河邊找鬼扫外。 笑死莉钙,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的畏浆。 我是一名探鬼主播胆胰,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼狞贱,長吁一口氣:“原來是場噩夢啊……” “哼刻获!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞎嬉,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蝎毡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后氧枣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沐兵,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年便监,在試婚紗的時候發(fā)現(xiàn)自己被綠了扎谎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡烧董,死狀恐怖毁靶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逊移,我是刑警寧澤预吆,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站胳泉,受9級特大地震影響拐叉,放射性物質(zhì)發(fā)生泄漏岩遗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一凤瘦、第九天 我趴在偏房一處隱蔽的房頂上張望宿礁。 院中可真熱鬧,春花似錦廷粒、人聲如沸窘拯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涤姊。三九已至,卻和暖如春嗤放,著一層夾襖步出監(jiān)牢的瞬間思喊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工次酌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恨课,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓岳服,卻偏偏與公主長得像剂公,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吊宋,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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