遞歸法

設(shè)一個未知函數(shù)f潦匈,用其自身構(gòu)成的已知函數(shù)g來定義:
f(n)=g(n ,f(n-1))??????n>0
f(0)=a?????????????????????n=0
???????為了定義f(n)无埃,必須先定義f(n-1)针贬,為了定義f(n-1),又必須先定義f(n-2)··· ···俏让,上述這種用自身的簡單情況來定義自己的方式稱為遞歸定義。
???????一個遞歸定義必須是有確切含義的茬暇,也就是說首昔,必須一步比一步簡單,最后是有終結(jié)的而钞,決不能無限循環(huán)下去沙廉。在f(n)的定義中,當(dāng)n為0時定義一個已知數(shù)a臼节,是最簡單的情況撬陵,稱為遞歸邊界,它本身不再使用遞歸的定義网缝。
???????與遞推一樣巨税,每一個遞歸定義都有其邊界條件。但不同的是粉臊,遞推是由邊界條件出發(fā)草添,通過遞推式求f(n)的值,從邊界到求解的全過程十分清楚扼仲;而遞歸則是從函數(shù)自身出發(fā)來達到邊界條件远寸。在通往邊界條件的遞歸調(diào)用過程中,系統(tǒng)用堆棧把每次調(diào)用的中間結(jié)果(局部變量和返回地址值)保存起來屠凶,直至求出遞歸邊界值f(0)=a驰后。然后返回調(diào)用函數(shù)。返回過程中矗愧,中間結(jié)果相繼椩钪ィ恢復(fù),f(1) = g(1 ,a) —> f(2) = g(2, f(1)) —> ··· —>直至求出f(n) = g(n , f(n - 1))。

遞歸按其調(diào)用方式分:

  • 直接遞歸 — 遞歸過程P直接自己調(diào)用自己夜涕;
  • 間接遞歸 — 即P包含另一過程D犯犁,而D又調(diào)用P;

遞歸算法適用的一般場合為:

  1. 數(shù)據(jù)的定義形式按遞歸定義女器。
    如裴波那契數(shù)列的定義: fn=fn-1 + fn-2; f0=1; f1=2酸役。
    對應(yīng)的遞歸程序?qū)崿F(xiàn)為:
public class FibonacciImpl {
    public static void main(String[] args) {
        final int n = 10;
        for (int i = 0; i < n; i++ ){
            System.out.print(fibonacci(i) + " ");
        }
    }

    private static int fibonacci(int n) {
        if (n == 0) {
            return 1;
        }
        if (n == 1) {
            return 2;
        }
        return (fibonacci(n - 2) + fibonacci(n - 1));
    }
}

結(jié)果為:

1 2 3 5 8 13 21 34 55 89 
  1. 數(shù)據(jù)之間的關(guān)系(即數(shù)據(jù)結(jié)構(gòu))按遞歸定義。如樹的遍歷晓避,圖的搜索等簇捍。
  2. 問題解法按遞歸算法實現(xiàn)。例如回溯法等俏拱。

對于2暑塑,3,可利用堆棧結(jié)構(gòu)將其轉(zhuǎn)換為非遞歸算法锅必。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末事格,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子搞隐,更是在濱河造成了極大的恐慌驹愚,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劣纲,死亡現(xiàn)場離奇詭異逢捺,居然都是意外死亡,警方通過查閱死者的電腦和手機癞季,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門劫瞳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绷柒,你說我怎么就攤上這事志于。” “怎么了废睦?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵伺绽,是天一觀的道長。 經(jīng)常有香客問我嗜湃,道長奈应,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任购披,我火速辦了婚禮钥组,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘今瀑。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布橘荠。 她就那樣靜靜地躺著屿附,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哥童。 梳的紋絲不亂的頭發(fā)上挺份,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音贮懈,去河邊找鬼匀泊。 笑死,一個胖子當(dāng)著我的面吹牛朵你,可吹牛的內(nèi)容都是我干的各聘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼抡医,長吁一口氣:“原來是場噩夢啊……” “哼躲因!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起忌傻,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤大脉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后水孩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镰矿,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年俘种,在試婚紗的時候發(fā)現(xiàn)自己被綠了秤标。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡安疗,死狀恐怖抛杨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荐类,我是刑警寧澤怖现,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站玉罐,受9級特大地震影響屈嗤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吊输,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一饶号、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧季蚂,春花似錦茫船、人聲如沸琅束。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涩禀。三九已至,卻和暖如春然眼,著一層夾襖步出監(jiān)牢的瞬間艾船,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工高每, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屿岂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓鲸匿,卻偏偏與公主長得像爷怀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晒骇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

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