感覺很難理解,有好多建議嗎?
看看我之前對一個遞歸問題的回答. 函數的實現功能方面理解遞歸不知道對你有沒有幫助.
簡單的理解就是:函數呼叫自身。
自身
合格的遞歸要有結束條件。
結束條件
明白這2點,就OK了。
要想學會遞歸,首先要學會遞歸。
遞歸就是包子餡的包子,極限是饅頭。
給一個正常的程式碼範例:
假設我們想要遍歷一個【巢狀的】資料結構,如【DOM 元素的children 屬性還是同類型的DOM 元素】,這時就會使用到最簡單而常見的遞歸:函數呼叫自己,一層層解開嵌套,這只需要一兩行JS 即可實現:
function walk (node) { // 先打印出本节点的值 console.log(node.value) // 对每个 child 调用自身 node.children.forEach(child => walk(chid)) } // 简单的树形嵌套数据结构示例 const tree = { value: 1, children: [ { value: 2, children: [] }, { value: 3, children: [{ value: 4, chilren: [] }] }, { value: 5, children: [] } ] } // 遍历该树形数据结构 walk(tree)
遞歸其實不難理解,我舉個例子,6層高的樓,只有一層有蘋果,我們在任何一層找到蘋果,都會停止。 。找一次都會出現2個結果,做判斷需要不需要往下找,往下找就是重複第一個過程,這就是遞迴。
int i; int function a(i){ if (i < 2) return a(i+1); else return i; } a(0); //执行后返回2
上面程式碼便於理解沒寫標準,遞歸就是呼叫自己形成巢狀.因為只有一個return語句,所以呼叫a(0)後我們可以這樣看:嵌套進去:
a(0)->a(a(0+1))->a(a(1)) a(a(a(1+1)))->a(a(a(2)))
在回來:
a(a(a(2)))->a(a(2)) a(a(2))->a(2) a(2)->2
一個老司機的經驗:多練多悟
看看我之前對一個遞歸問題的回答. 函數的實現功能方面理解遞歸
不知道對你有沒有幫助.
簡單的理解就是:函數呼叫
自身
。合格的遞歸要有
結束條件
。明白這2點,就OK了。
要想學會遞歸,首先要學會遞歸。
遞歸就是包子餡的包子,極限是饅頭。
給一個正常的程式碼範例:
假設我們想要遍歷一個【巢狀的】資料結構,如【DOM 元素的children 屬性還是同類型的DOM 元素】,這時就會使用到最簡單而常見的遞歸:函數呼叫自己,一層層解開嵌套,這只需要一兩行JS 即可實現:
遞歸其實不難理解,我舉個例子,6層高的樓,只有一層有蘋果,我們在任何一層找到蘋果,都會停止。 。找一次都會出現2個結果,做判斷需要不需要往下找,往下找就是重複第一個過程,這就是遞迴。
上面程式碼便於理解沒寫標準,遞歸就是呼叫自己形成巢狀.
因為只有一個return語句,所以呼叫a(0)後我們可以這樣看:
嵌套進去:
在回來:
一個老司機的經驗:多練多悟