javascript - 怎麼學會遞迴?
漂亮男人
漂亮男人 2017-07-05 10:51:50
0
6
837

感覺很難理解,有好多建議嗎?

漂亮男人
漂亮男人

全部回覆(6)
三叔

看看我之前對一個遞歸問題的回答. 函數的實現功能方面理解遞歸
不知道對你有沒有幫助.

大家讲道理

簡單的理解就是:函數呼叫自身

合格的遞歸要有結束條件

明白這2點,就OK了。

我想大声告诉你
  1. 要想學會遞歸,首先要學會遞歸。

  2. 遞歸就是包子餡的包子,極限是饅頭。

  3. 給一個正常的程式碼範例:

假設我們想要遍歷一個【巢狀的】資料結構,如【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個結果,做判斷需要不需要往下找,往下找就是重複第一個過程,這就是遞迴。

Peter_Zhu
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
曾经蜡笔没有小新

一個老司機的經驗:多練多悟

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板