再談循環(huán)&迭代&回溯&遞歸&遞推這些基本概念

循環(huán):不斷重復(fù)進(jìn)行某一運(yùn)算、操作。

迭代:不斷對(duì)前一舊值運(yùn)算得到新值直到達(dá)到精度。一般用于得到近似目標(biāo)值,反復(fù)循環(huán)同一運(yùn)算式(函數(shù)),并且總是把前一 次運(yùn)算結(jié)果反代會(huì)運(yùn)算式進(jìn)行下一次運(yùn)算

遞推:從初值出發(fā)反復(fù)進(jìn)行某一運(yùn)算得到所需結(jié)果。-----從已知到未知,從小到達(dá)(比如每年長(zhǎng)高9cm,20年180,30后270)

回溯:遞歸時(shí)經(jīng)歷的一個(gè)過程。

遞歸:從所需結(jié)果出發(fā)不斷回溯前一運(yùn)算直到回到初值再遞推得到所需結(jié)果----從未知到已知,從大到小,再?gòu)男〉酱?你想進(jìn)bat,那么編程就的牛逼,就得卸載玩者農(nóng)藥,努力學(xué)習(xí))。遞歸(Recursion)是從歸納法(Induction)衍生出來的。

一個(gè)運(yùn)算(操作),可以通過不斷調(diào)用本身的運(yùn)算形式,往往需要通過前一次的結(jié)果來得到當(dāng)前運(yùn)算的結(jié)果,因而,程序運(yùn)行時(shí),總是先一次次地「回溯」前一次的結(jié)果(回溯過程中這些結(jié)果是未知的,直到回溯到初值令回溯終止,再層層遞推回來得到當(dāng)前要求的值)

一個(gè)完整的遞歸應(yīng)該有下面三個(gè)條件,否則就是不合格的遞歸

明確遞歸的終止方法(一個(gè)遞歸必須有他遞推到頭的界定,否則將會(huì)是無限遞歸 )

明確的終止時(shí)處理方法

重復(fù)調(diào)用自身并縮小問題規(guī)模

死循環(huán)不會(huì)棧溢出而無限遞歸會(huì)出現(xiàn)棧溢出情況,詳情推薦閱讀:《遞歸-程序之美,及其與循環(huán)的區(qū)別》,但實(shí)際上業(yè)務(wù)模型幾乎不會(huì)遇到。

kidneyball知乎回答總結(jié)會(huì)精辟

在有循環(huán)的語言里,有的人認(rèn)為尾遞歸優(yōu)化除了炫技之外是完全無用的。其實(shí)不然,尾遞歸寫法在我看來有以下好處

強(qiáng)迫你把循環(huán)寫成單獨(dú)的函數(shù)。這又有什么好處呢?這會(huì)影響你的編程風(fēng)格,習(xí)慣使用尾遞歸之后,你的寫出一個(gè)幾百行大函數(shù)的機(jī)率會(huì)小得多。

保證沒有副作用,統(tǒng)一使用不可變數(shù)據(jù)。在循環(huán)里,循環(huán)變量就是一個(gè)可變數(shù)據(jù)。作為人肉開發(fā)者,如果想保證自己的某段程序沒有副作用,最好的做法就是根本不要寫任何帶副作用的東西,這樣代碼審查時(shí)一眼看過去就能知道有沒有副作用。至于避免副作用有什么好處,這又可以寫一篇文章,這里就不展開了。

轉(zhuǎn)換成惰性序列時(shí)比較好看。在某些語言里,尾遞歸形式基本上只要去掉循環(huán)變量(變成無限遞歸), 把初始狀態(tài)作為首元素,就是一個(gè)能直接拿來用的惰性序列。

“遞歸”是一種思路,這種思路的特點(diǎn)是:我不關(guān)注問題本身,我只關(guān)注這個(gè)問題如何可以用一種可重復(fù)的方式分解為一些規(guī)模更小的子問題,以及這些子問題與原問題的關(guān)系。再加上當(dāng)問題的規(guī)模足夠小的時(shí)候,存在一個(gè)簡(jiǎn)單直接的解法。

遞推和遞歸還是迷糊,show code

//遞歸求解

function?fib(n){

????return?n?<2?1:fib(n-1)?+?fib(n-2);

}

//遞推求解

function?fib(n){

????let?start=0;

????let?fn=1;

????for?(let?i=0;i<n;i++)?{

????????let?t=fn;

????????fn=fn+start;

????????start=t;

????}

????return?fn;

}

不難看出,

程序的一般寫法就好比是數(shù)列的通項(xiàng)公式。

程序的遞歸寫法就好比是數(shù)列的遞推公式。

再談循環(huán)&迭代&回溯&遞歸&遞推這些基本概念 - 模型設(shè)計(jì),領(lǐng)域設(shè)計(jì),軟件設(shè)計(jì), - 周陸軍的個(gè)人網(wǎng)站,不定時(shí)更新,文有不妥之處,請(qǐng)留言告知,多謝(再談系列多為總結(jié)性文章(搬磚湊))。

推薦文章:

程序員們,以后再也別問我遞歸的問題了

遞歸-程序之美,及其與循環(huán)的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,061評(píng)論 0 2
  • 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大獎(jiǎng):點(diǎn)擊這里領(lǐng)取 在...
    HetfieldJoe閱讀 1,886評(píng)論 0 14
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 6,607評(píng)論 0 13
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,723評(píng)論 0 5
  • 1,利用時(shí)間交替法。短時(shí)間工作,短時(shí)間玩,然后再以此類推遞加時(shí)間量。 2,拆解一下,利用自控力方式做。無意義的和有...
    阿碩的蘋果閱讀 122評(píng)論 0 0

友情鏈接更多精彩內(nèi)容