簡要理解遞迴

2021-10-25 19:22:04 字數 1313 閱讀 9871

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

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

存在一種簡單情境,可以使遞迴在簡單情境下退出。(遞迴出口)

一定有一種可以退出程式的情況

總是在嘗試將乙個問題化簡到更小的規模

父問題與子問題不能有重疊的部分

func

( mode )

else

}

遞–>規律–>總要有乙個明確的規律來定義整個流程,才能會想到用遞迴的形式處理問題。把規律總結出來,大致這個規律離不開這個:方法的返回參作為方法的入參,乙個規律的結尾,一定是下乙個規律的開始。

歸–>最小邊界–>按一定規律傳遞下來,總得有個頭吧,總得有個邊界。需要在運用遞迴的時候特殊處理這些頭。往往是通過這些頭來終止整個遞迴行為的。說白了就是上面一般形式的遞迴出口。

怎麼理解呢,一般會用到遞迴的場景,都是有個頭,然後可以按照規律無線變大,無線擴充套件的。最開始的入參就是無線擴充套件的目標點,按規律從這個遠方的無線擴充套件的目標點,一步一步傳遞到最開始的頭,作為遞的終點,通過最小邊界特殊頭的處理,再一步一步歸到目標點完成整個遞迴操作

1)老生常談的斐波那契數列:0、1、1、2、3、5、8、13…

規律:第n項 = 第n-1項 + 第n-2項

最小邊界:由於最小項是第0項,所以n最小是2,那麼最小邊界就是 n=1 和 n=0 的時候

n=0 返回第0項 = 0,

n=1 返回第1項 = 1,

n=2 返回第(2-1)項 + 第(2-2)項 = 第1項 + 第2項 = 0 + 1 = 1

…以此類推,**如下

public

static

long

fibonacci

(long number)

2)老生常談的二叉樹深度,這屬於最基本的演算法知識點了。隨便放個二叉樹:

3

/ \9 20

/ \

15 7

規律:當前node的深度 = max(下游左孩子節點的深度 , 右下游孩子節點的深度) + 1

最小邊界:最上面的根節點深度 = 0

**如下:

public

intmaxdepth

(treenode root)

尾遞迴 簡要

function fac n fac 5 n有幾次就會呼叫幾次,eg fac 5 fac 5 4 fac 3 fac 5 4 3fac 2 fac 5 4 3 2fac 1 fac 5 4 3 2 fac 5 4 6 fac 5 24 120 函式呼叫時,每此呼叫一次就會儲存一次記錄,當資料足夠大時...

redux簡要理解

connect將props dispatch連線到元件上。provider基於store.subscribe 封裝,如果store發生變化,會自動更新store,觸發重渲染。如果不寫provider,需要手動監聽 更新render。index.js store.subscribe function ...

關於各種編碼的簡要理解

gb2312 兩個大於127的字元連在一起時,就表示乙個漢字。還重新編碼了acsii,於是被重新編碼的兩個位元組acsii就是常說的 全形 字元,而原來127以下的那些就叫做 半形 字元。gbk 只要第乙個位元組大於127,就固定表示這是乙個漢字的開始,gbk包括了gb2312的所有內容,同時又增加...