總結帖 關於遞迴

2021-08-09 05:48:10 字數 1049 閱讀 7286

在函式或子過程的內部,直接或者間接地呼叫自己的演算法。

我自己通俗的理解是:要解決當前這個問題,就要先解決另乙個問題,顧名思義,先遞後歸

例如,做一碗麵條,就要先完成放麵入鍋的操作,而這個操作的前提又是水燒滾,燒水之前還要先放油。所以,第乙個操作就是放油,然後燒水,然後放麵,最後出鍋。

一句話就是:由結論入手,摸索到前提,最後從前提出發。

就像數學裡的證明題,也像一些博主說的數學歸納法,高中做數列的時候也是這個道理。典型的遞迴有:漢諾塔問題,階乘,斐波那契數列等。

眾所周知,遞迴在空間效能方面是非常糟糕的。那我們為什麼還要用遞迴?有兩個原因:

a.首先對於無限迴圈,用for肯定是無法實現的;而且遞迴也適用於不定長欄位;

b.遞迴的語句簡潔,雖然難理解一點。

首先,要確定兩件事:

1.確定遞迴公式

2.確定邊界(終了)條件

接下來,我們來剖析遞迴的結構:

void func( mode)

else

}

// 遞迴計算階乘

int factorial(n)

return n * factorial(n-1); //和第n項的關係(步進表示式)

}

1.可以通過遞迴呼叫來縮小問題規模,且新問題與原問題有著相同的形式。

2.存在一種簡單情境,可以使遞迴在簡單情境下退出。

遞迴的基本思想是把規模大的問題轉化為規模小的相似的子問題來解決。在函式實現時,因為解決大問題的方法和解決小問題的方法往往是同乙個方法,所以就產生了函式呼叫它自身的情況。另外這個解決問題的函式必須有明顯的結束條件,這樣就不會產生無限遞迴的情況了。
參考博文:

關於Block的學習總結(個人總結帖)

之前寫過陸陸續續寫過一些關於block的東西 但是都是太羅嗦和繁瑣,所以今天寫一篇總結性的帖子 1.如何宣告乙個block block宣告有兩個形式,這個很重要,比較容易混攪不清 第乙個是直接宣告block變數 int bblock int a,int b bblock是函式名字,其他的時宣告的形式...

關於遞迴自己的總結

最近可能是旁邊各種人都準備找工作的事情,讓我也感覺有一些慌張了,甚至有的時候我都不知道我學計算機是真正的喜歡還是為了找工作 好在最近自己思考了一下,並且飛餅同學讓我知道了一些事情,她說的一句話我很喜歡,就當我畢生要完成的事情 平靜地承認自己的不足,並解釋不足的原因,讓自己像秤砣一樣穩穩地沉下去,回到...

求助帖 關於psd檔案的

psd檔案是ps軟體匯出的一種檔案儲存格式,最近我看了關於psd檔案儲存的資訊,有一點疑問,不知道psd檔案中的組 資料夾,就是在圖層介面所看到的資料夾 具體在psd檔案中是儲存 一 file header 標頭檔案 二 color resources 色彩模式資料 三 image resource...