數(shù)學歸納法和遞歸

最簡單和常見的數(shù)學歸納法是證明當n等于任意一個自然數(shù)時某命題成立。
證明分下面兩步:

  1. 證明當n = 1時命題成立。
  2. 證明如果在n = m時命題成立,那么可以推導出在n = m+1時命題也成立。(m代表任意自然數(shù))

這種方法的原理在于:首先證明在某個起點值時命題成立,然后證明從一個值到下一個值的過程有效。當這兩點都已經(jīng)證明,那么任意值都可以通過反復使用這個方法推導出來。把這個方法想成多米諾效應也許更容易理解一些。例如:你有一列很長的直立著的多米諾骨牌,如果你可以:

  1. 證明第一張骨牌會倒。
  2. 證明只要任意一張骨牌倒了,那么與其相鄰的下一張骨牌也會倒。

那么便可以下結(jié)論:所有的骨牌都會倒下。

例如:等差數(shù)列求和公式:

1 + 2 + 3 + ··· + n = n (n+1) / 2

根據(jù)數(shù)學歸納法,這個問題應該這樣證明:

  1. 當n = 1時,1 = 1 * 2 / 2成立;
  2. 假設n = n - 1時,1 + 2 + 3 + ··· + (n - 1) = (n - 1) n / 2成立,那么
    原式左 = 1 + 2 + 3 + ··· + (n - 1) + n
    = (n - 1) n / 2 + n
    = n (n+1) / 2
    = 原式右
  3. 得證。

為什么要說這個呢?
其實在程序設計中,遞歸就用到了這個思想。

如果將上例運用遞歸用編程語言寫出來如下:

public int sum(int n){
    if(n < 1){    
        return -1;
    }
    if(n == 1){
        return 1;
    }
  //假設n - 1成立,這是一般的情況。
  //在代碼書寫中,先將一般的情況寫出來構建出遞歸的框架,然后再去排除特殊的情況,以便完成遞歸。
    return sum(n - 1) + n;    
}

可以發(fā)現(xiàn),這段代碼將數(shù)學歸納法的思想恰當?shù)捏w現(xiàn)了出來。

最后我們總結(jié)一下遞歸代碼的書寫方法:

遞歸書寫方法:

  1. 嚴格定義遞歸函數(shù)作用,包括參數(shù),返回值,side-effect
  2. 先一般,后特殊
  3. 每次遞歸必須縮小問題規(guī)模
  4. 每次問題縮小規(guī)模程度必須為1
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。