成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于遞歸的思考

lyning / 2465人閱讀

摘要:之前有接觸過遞歸,看到別人寫的遞歸函數(shù)的代碼,好生羨慕,怎么就能寫這么好呢我怎么就想不到這樣寫呢如此等等。

之前有接觸過遞歸,看到別人寫的遞歸函數(shù)的代碼,好生羨慕,怎么就能寫這么好呢?我怎么就想不到這樣寫呢?如此等等。

就拿fibonacci函數(shù)來說吧,一個普通的函數(shù)可能這樣寫:

def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n-1) + fib(n-2)

我看到這個函數(shù)的思考方式是這樣的:

1. 當(dāng)n=0時:返回0
2. 當(dāng)n=1時:返回1
3. 當(dāng)n=2時:
    1. 首先去調(diào)用n=1,返回1
    2. 再去調(diào)用n=0,返回0
    3. 把0和1相加返回1
4. 當(dāng)n=3時:
    1. 調(diào)用n=2
        1. 調(diào)用n=1,返回1
        2. 調(diào)用n=0,返回0
        3. 相加返回1
    2. 調(diào)用n=1,返回1
    3. 把1和1相加返回2
5. 等等

想到這我頭都要爆了,徹底被人家的函數(shù)折服了,看來我是寫不成這么好的函數(shù)了。

但我轉(zhuǎn)念一想,這個函數(shù)的本質(zhì)是fibnacci序列,我何不回歸fibonacci本身呢?fibonacci用數(shù)學(xué)公式表示應(yīng)該是這樣:

看到公式我恍然大悟,上面那個函數(shù)不就是根據(jù)這個公式直接翻譯的嘛!原來我一直思考都是順著函數(shù)的代碼思考,這樣肯定會覺得很難,
正確的思考方式應(yīng)該是從算法出發(fā)然后再寫代碼。

經(jīng)過了上面的慘痛教訓(xùn)看看我能不能寫出正確的fibonacci序列函數(shù),分段函數(shù)的公式應(yīng)該是這樣的:

那么直接寫成代碼就應(yīng)該是這樣的:

def fib_seq(n):
    seq = []
    if n == 0:
        seq.append(0)
    else:
        seq.extend(fib_seq(n-1))
        seq.append(fib(n))
    return seq

咦,這兩個append好像可以合并:

def fib_seq(n):
    seq = []
    if n > 0:
        seq.extend(fib_seq(n-1))
    seq.append(fib(n))
    return seq

哇,原來如此!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38075.html

相關(guān)文章

  • Python | 遞歸

    摘要:那假如我們用遞歸來描述這種情況呢定義基本情況其它情形所以在上述求和中的定義又用到了自己本身的定義,這就構(gòu)成了遞歸。 說起遞歸,我覺得其實大部分人應(yīng)該是不陌生的,遞歸廣泛存在于生活中。比如: showImg(https://segmentfault.com/img/remote/1460000007420204?w=294&h=450); The woman in this image ...

    qieangel2013 評論0 收藏0
  • 《java 8 實戰(zhàn)》讀書筆記 -第十三章 函數(shù)式思考

    摘要:當(dāng)我們希望能界定這二者之間的區(qū)別時,我們將第一種稱為純粹的函數(shù)式編程,后者稱為函數(shù)式編程。函數(shù)式編程我們的準(zhǔn)則是,被稱為函數(shù)式的函數(shù)或方法都只能修改本地變量。另一種觀點支持引用透明的函數(shù)式編程,認(rèn)為方法不應(yīng)該有對外部可見的對象修改。 一、實現(xiàn)和維護(hù)系統(tǒng) 1.共享的可變數(shù)據(jù) 如果一個方法既不修改它內(nèi)嵌類的狀態(tài),也不修改其他對象的狀態(tài),使用return返回所有的計算結(jié)果,那么我們稱其為純粹...

    Donne 評論0 收藏0
  • leetcode100 Same Tree 引發(fā)對遍歷?算法思考

    摘要:判斷兩棵樹是否是相同題目要求傳入兩棵樹的根節(jié)點,判斷這兩棵樹是否相同此題的核心就在于如何遍歷樹。定義樹的一種自然方式是遞歸的方式。一棵樹是一些節(jié)點的集合,這個集合可以是空集。這個遍歷算法可以用于場景如,計算一個節(jié)點的高度。 判斷兩棵樹是否是相同 題目要求:傳入兩棵樹的根節(jié)點,判斷這兩棵樹是否相同此題的核心就在于如何遍歷樹。一旦我們解決了這個問題,題目也就迎刃而解了。下面就來介紹一下 關(guān)...

    cyrils 評論0 收藏0
  • 記一次XX前端面試

    摘要:面試官說那我問你一個哲學(xué)的問題,為什么有數(shù)據(jù)結(jié)構(gòu)這種東西哇,這是啥,巴拉巴拉扯了一通,大致就是物以類聚,人以群分,先人積累下來的經(jīng)驗,這些讓我們更方便處理數(shù)據(jù)啥的。 前因,沒有比摸魚有趣的事了 距離自己被外派(俗稱外包)出去,已經(jīng)過了快五個月,工作的話,很閑。人啊,一定保持好的習(xí)慣,懶惰是會上癮,日常摸魚,懷疑人生,我是誰,我在哪,我要干什么。 中午吃飯的時候,收到了boss直聘的一條...

    Shisui 評論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)與算法之精講「遞歸系列」

    摘要:終止條件遞推公式遞歸的分類通過做大量的題,根據(jù)遞歸解決不同的問題,引申出來的幾種解決和思考的方式。我們通過層與層之間的計算關(guān)系用遞推公式表達(dá)出來做計算,經(jīng)過層層的遞歸,最終得到結(jié)果值。 showImg(https://segmentfault.com/img/remote/1460000019222330); 前言 幾個月之前就想寫這樣一篇文章分享給大家,由于自己有心而力不足,沒有把真...

    zhichangterry 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<