最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Good Morning, Functional JS (Day 25, Recursion 遞迴)

XAMPP下载 admin 758浏览 0评论
 本系列文章,內容以探討 Kyle Simpson. Functional-Light JavaScript 一書內容為主

目標:是讀懂 FP,能用 code 與人交流,而不是被壓在 FP 的術語大山下喘不過氣。
提醒:本文中各種的 FP 小工具,僅為邏輯演示,實際上並不適合在 production 中使用,建議使用 FP library。
原文地址:Functional-Light JavaScript
今天研究的主題是 Recursion 遞迴,我得自首:我承認遞迴是很強大的技巧,但我不太喜歡用 – 強大但令人困惑,我把它跟正則表達一起擺在技術債的最底部,總是一直沒去碰。

但該來的還是會來,沒想到研究個 FP ,竟然又讓我碰到遞迴,上次看到是在學校學演算法的時候…,今天就來還技術債吧。

定義
「為了理解遞迴,則必須首先理解遞迴。」[^1]

回憶一下課堂上關於遞迴的定義:指 function 執行過程反覆呼叫自身,持續到基本條件滿足時。三個重點:

基本條件,滿足基本條件,遞迴停止,也可說是終止條件。
若未滿足,呼叫自己。
每一次都逐漸往基本條件的方向收斂。
一個遞迴演算法,必須要有一個基本條件,否則会一直遞迴下去,直到 stack overflow。

QQ截图20180918155703
 Droste Effect 遞迴的視覺呈現

你說課本的定義太難懂了!學校離我太遠了,那我們就看個例子[^2]

function foo(x) {
// 基本條件
if ( x < 5 ) return x
return foo(x / 2)
}
呼叫 foo (16),QQ截图20180918155719

 Photo by getify on GitHub

step2 ~ step3:未滿足條件,把 x / 2 結果作為參數,呼叫自己
step4:滿足基本條件 x < 5,return 4(圖中黑色虛線),不再遞迴。
這邊使用 call stack 解釋,step4 條件滿足時發生的事,如下圖,當基本條件滿足後,step 4 的 return 會觸發 stack 上所有的 function call(並且都執行 return),直到 return 最終結果:

QQ截图20180918155731

转载请注明:XAMPP中文组官网 » Good Morning, Functional JS (Day 25, Recursion 遞迴)

您必须 登录 才能发表评论!