程序員的數(shù)學(xué) - 歸納與遞歸

《程序員的數(shù)學(xué)》讀書筆記目錄

歸納

induction: 歸納

步驟

  1. 基底(base)- 證明P(0)成立
  2. 歸納(induction)- 假設(shè)P(k)成立邻遏,證明P(k+1)成立,其中k為不小于0的整數(shù)

循環(huán)不變式


遞歸

GNU is short for "GNU is Not UNIX"

發(fā)現(xiàn)遞歸的思路

從n層的整體問題中隱去部分問題
判斷剩余部分是否是n-1層的問題

遞推公式與解析式

遞推公式:利用自身推導(dǎo)自身的等式
解析式:只使用變量n表示自身的等式
在編程中虐骑,能使用解析式的盡量使用解析式准验,程序中的遞歸函數(shù)非常耗棧空間廷没,調(diào)用次數(shù)龐大糊饱,耗CPU,見斐波那契數(shù)列的例子颠黎。

漢諾塔(hanoi tower)

遞推公式(recursion relation)

$$
H(n)=\left{
\begin{aligned}
& 0 & n = 0 \
& H(n-1) + 1 + H(n-1) & n > 0
\end{aligned}
\right.
$$

解析式

$$ H(n) = 2^n - 1 $$

演示代碼

#include <stdio.h>
#include <stdlib.h>

void hanoi(int n, char x, char y, char z);

void hanoi(int n, char x, char y, char z) {
    if (0 == n) {
        // do nothing
    } else {
        hanoi(n - 1, x, z, y);
        printf("%c --> %c, ", x, y);
        hanoi(n - 1, z, y, x);
    }
}

int main(void) {
    hanoi(6, 'A', 'B', 'C');
}

階乘(factorial)

遞推公式

$$
n!=\left{
\begin{aligned}
& 1 & n = 0 \
& n × (n-1)! & n > 0
\end{aligned}
\right.
$$

求和公式

遞推公式

$$
SUM(n)=\left{
\begin{aligned}
& 0 & n = 0 \
& n + SUM(n - 1) & n > 0
\end{aligned}
\right.
$$

解析式

$$ SUM(n) = \dfrac{n × (n + 1)}{2} $$

菲波那切數(shù)列(fibonacci sequence)

$$
F(n)=\left{
\begin{aligned}
& 0 & n = 0 \
& 1 & n = 1 \
& F(n - 1) + F(n - 2) & n > 1
\end{aligned}
\right.
$$

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

遞歸實現(xiàn)
按照遞推公式
/**
 * 原始實現(xiàn)
 *
 * @param n 第n個Fibonacci數(shù)另锋,從0開始
 */
public static long fibonacciRecursively(int n) {
    if (n <= 1) {
        return n;
    } else {
        return fibonacciRecursively(n - 1) + fibonacciRecursively(n - 2);
    }
}
優(yōu)化一
/**
 * 優(yōu)化一:減少一次遞歸調(diào)用
 *
 * @param n 第n個Fibonacci數(shù),從0開始
 */
public static long fibonacciRecursivelyWithLoop(int n) {
    if (n <= 1) {
        return n;
    } else {
        long result = 1;
        do {
            result += fibonacciRecursivelyWithLoop(n - 2);
            n--;
        } while(n > 1);
        return result;
    }
}
優(yōu)化二
/**
 * 優(yōu)化二:使用迭代
 *
 * @param n 第n個Fibonacci數(shù)狭归,從0開始
 */
public static long fibonacciIteratively(int n) {
    if (n <= 1) {
        return n;
    } else {
        long a = 0, b = 1;
        do {
            long tmp = b;
            b += a;
            a = tmp;
        } while(--n > 1);
        return b;
    }
}
優(yōu)化三
/**
 * 優(yōu)化三:使用迭代夭坪,每次迭代計算兩項,迭代總數(shù)少了一半
 *
 * @param n 第n個Fibonacci數(shù)过椎,從0開始
 */
public static long fibonacciIterativelyFaster(int n) {
    if (n <= 1) {
        return n;
    } else {
        long a, b = 1;
        n--;
        a = n & 1;
        n /= 2;
        while(n-- > 0) {
            a += b;
            b += a;
        }
        return b;
    }
}

帕斯卡三角形(Pascal's Triangle)

組合數(shù)的遞歸定義

$$
C^K_N=\left{
\begin{aligned}
& 1 & N = 0 或 N = K \
& C^{K - 1}{N - 1} + C^K{N - 1} & K > 0 且 K < N
\end{aligned}
\right.
$$

組合數(shù)的數(shù)理意義

N個不同的元素台舱,其中一個元素a,從N中選K個元素的組合數(shù)等于包含a的組合數(shù)不包含a的組合數(shù)之和

遞歸圖形--分形(fractale)

二叉樹

海龜作圖
  1. forward(n) // 前進n步并劃線
  2. backward(n) // 后腿n步不劃線
  3. left() // 逆時針轉(zhuǎn)動一定角度
  4. right() // 順時針轉(zhuǎn)動一定角度

謝爾平斯基三角形(sierpinski triangle)

顏色區(qū)分帕斯卡三角形的奇偶數(shù)得到謝爾平斯基三角形

遞歸與歸納的對比(recursion and induction)

遞歸與歸納潭流,方向不同竞惋,從一般性前提推出個別性結(jié)論的是遞歸思想,從個別性前提推出一般性結(jié)論的是歸納思想灰嫉。

演示代碼

// 歸納
void prove(int n) {
    int k;
    // step 1 start
    k = 0;
    printf("P(%d)成立\n", k);
    // step 1 end
    while (k < n) {
        // step 2 start
        printf("P(%d)成立拆宛,則P(%d)也成立\n", k, k + 1);
        // step 2 end
        k++;
    }
    printf("證明完成");
}

// 遞歸
void prove(int n) {
    if (0 == n) {
        printf("步驟1 --> P(%d)成立。\n", n);
    } else {
        prove(n - 1);
        printf("步驟2 --> 若P(%d)成立讼撒,則P(%d)也成立浑厚。\n", n - 1, n);
        printf("因此股耽,P(%d)成立。\n", n);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钳幅,一起剝皮案震驚了整個濱河市物蝙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敢艰,老刑警劉巖诬乞,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機行您,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門献雅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了悴势?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長措伐。 經(jīng)常有香客問我瞳浦,道長,這世上最難降的妖魔是什么废士? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任叫潦,我火速辦了婚禮,結(jié)果婚禮上官硝,老公的妹妹穿的比我還像新娘矗蕊。我一直安慰自己,他們只是感情好氢架,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布傻咖。 她就那樣靜靜地躺著,像睡著了一般岖研。 火紅的嫁衣襯著肌膚如雪卿操。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天孙援,我揣著相機與錄音害淤,去河邊找鬼。 笑死拓售,一個胖子當著我的面吹牛窥摄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播础淤,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼崭放,長吁一口氣:“原來是場噩夢啊……” “哼哨苛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起币砂,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤建峭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后决摧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亿蒸,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年蜜徽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片票摇。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拘鞋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矢门,到底是詐尸還是另有隱情盆色,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布祟剔,位于F島的核電站隔躲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏物延。R本人自食惡果不足惜宣旱,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叛薯。 院中可真熱鬧浑吟,春花似錦、人聲如沸耗溜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抖拴。三九已至燎字,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阿宅,已是汗流浹背候衍。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洒放,地道東北人脱柱。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像拉馋,于是被迫代替她去往敵國和親榨为。 傳聞我的和親對象是個殘疾皇子惨好,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,745評論 0 33
  • 算法和數(shù)據(jù)結(jié)構(gòu) [TOC] 算法 函數(shù)的增長 漸近記號 用來描述算法漸近運行時間的記號随闺,根據(jù)定義域為自然數(shù)集$N=...
    wxainn閱讀 1,064評論 0 0
  • 夜里總是做夢日川,夢到自己在無邊的曠野找不到來時的路也回不了家,從沒有覺得日子這樣難熬矩乐,說給你聽龄句,你卻置若罔聞,內(nèi)心的...
    南風(fēng)北巷的風(fēng)閱讀 210評論 0 0
  • 本來這篇文章的題目應(yīng)該叫作『艷遇西湖』散罕,但是由于我在上一個賢者時間段內(nèi)保持著冷靜分歇,所以拒絕了那個因為喜歡我文章而表...
    A7TuG3閱讀 527評論 1 2
  • 最近碰到了CFObject和NSObject轉(zhuǎn)換的問題,由于ARC不能管理Core Foundation Obje...
    張霸天閱讀 208評論 0 0