在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

所有遞歸代碼都可以轉為非遞歸代碼

算法與數據結構 ? 來源:碼農的荒島求生 ? 作者:碼農的荒島求生 ? 2022-04-19 15:02 ? 次閱讀

先說答案,這是肯定的,所有遞歸代碼都可以轉為非遞歸代碼。

之所以所有的遞歸都能轉為迭代算法是因為遞歸借助函數調用,函數調用本身就是基于調用棧這種結構實現的,只不過這一切都是自動完成的,我們當然也可以用代碼手動模擬出來。

60f64680-bf93-11ec-9e50-dac502259ad0.png

我們知道將遞歸調用全部展開后其實會形成一棵樹,把遞歸轉為非遞歸無非就是在遍歷這棵樹,那么遍歷樹就有很多技術了,基于棧的深度優先遍歷Depth-first traversal,或者基于隊列的廣度優先遍歷breadth-first traversal都是可以的:

610cf696-bf93-11ec-9e50-dac502259ad0.png

哦對了,說到算法,大家趕緊去關注小風哥的算法號,這個公眾號也是我親手寫的,只不過數據結構與算法這個話題有點宏大因此特意開了新號,大家快去關注吧。 說會遞歸轉為非遞歸這個話題,更理論一些的解釋是這樣的,不管是遞歸還是非遞歸,這兩者都是圖靈完備的,既然是圖靈完備,那么它們在表達能力上就是等價的,不存在誰不能轉為誰的問題。關于圖靈完備參考這篇《計算機科學中那些有趣的事實》。 只不過這存在一個難易程度的問題。 大家都知道尾遞歸最容易轉為非遞歸的迭代形式,本質上是這棵樹不是多叉的而是單叉的,單叉的不就退化成鏈表了嘛,遍歷鏈表當然是簡單的,但如果是多叉的話問題就沒那么簡單了,這里最有趣的是不存在一種模板可以讓我們直接用套路的形式把遞歸轉為非遞歸,因此這里存在一個問題:為什么你要把遞歸轉為非遞歸呢?因為最終你會發現將遞歸轉為非遞歸無非就是你自己接手了編譯器本來已經替你完成的工作,你會發現自己在手動模擬函數調用。

61368826-bf93-11ec-9e50-dac502259ad0.png

遞歸的優勢很明顯:代碼簡潔,容易理解和維護,其為人詬病的地方在于執行效率“可能”沒有非遞歸版本的高,但你最好理解這句話到底在說什么,到底哪里效率就不高了? 我們知道函數調用本身并不是免費的,函數調用也是有代價的,這里的代價就在于維護函數調用以及函數返回需要額外執行一些指令,關于這部分的內容可以參考《函數調用時底層發生了什么?》,同時棧區空間有限,因此如果你的遞歸調用層級太多的話可能會導致棧溢出,撐爆你的運行時環境以及可能存在重復計算問題(可以利用memory table解決),除此之外除非你有絕對令人信服的理由,否則你不應該試圖將遞歸轉為非遞歸。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4363

    瀏覽量

    63760
  • 代碼
    +關注

    關注

    30

    文章

    4875

    瀏覽量

    69952
  • 遞歸
    +關注

    關注

    0

    文章

    29

    瀏覽量

    9139

原文標題:遞歸代碼都可以轉為非遞歸嗎 ?

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    java反編譯的代碼可以修改么

    Java反編譯是一種將編譯后的Java字節碼(.class文件)轉換回源代碼的過程。反編譯后的代碼可以進行修改,但是需要注意,反編譯代碼的質量和可讀性可能會受到原始編譯
    的頭像 發表于 09-02 11:00 ?1066次閱讀

    hex可以轉成源代碼

    Hex文件可以轉換成源代碼的近似形式,但無法直接還原為原始的、完全相同的源代碼 。這是因為Hex文件是二進制文件,包含了程序編譯后的機器碼,這些機器碼與原始的源代碼在結構和表達上存在顯
    的頭像 發表于 09-02 10:41 ?1700次閱讀

    Python遞歸的經典案例

    當我們碰到諸如需要求階乘或斐波那契數列的問題時,使用普通的循環往往比較麻煩,但如果我們使用遞歸時,會簡單許多,起到事半功倍的效果。這篇文章主要和大家分享一些和遞歸有關的經典案例,結合一些資料談一下個人的理解,也借此加深自己對遞歸
    的頭像 發表于 08-05 15:57 ?510次閱讀

    人員定位系統都可以用于哪些行業?

    。 一、人員定位系統都可以用于哪些行業? 這套系統可以服務的行業非常多,尤其是崗位具有一定危險性的,那么定位系統可以說發揮的作用十分明顯,比如化工廠、消防員、礦井、戶外勘探等,而為了便于人員管理的場景也
    的頭像 發表于 07-15 11:32 ?546次閱讀
    人員定位系統<b class='flag-5'>都可以</b>用于哪些行業?

    遞歸神經網絡和循環神經網絡的模型結構

    遞歸神經網絡是一種旨在處理分層結構的神經網絡,使其特別適合涉及樹狀或嵌套數據的任務。這些網絡明確地模擬了層次結構中的關系和依賴關系,例如語言中的句法結構或圖像中的層次表示。它使用遞歸操作來分層處理信息,有效地捕獲上下文信息。
    的頭像 發表于 07-10 17:21 ?1032次閱讀
    <b class='flag-5'>遞歸</b>神經網絡和循環神經網絡的模型結構

    遞歸神經網絡的實現方法

    遞歸神經網絡(Recursive Neural Network,簡稱RNN)是一種特殊類型的神經網絡,其特點在于能夠處理具有層次或樹狀結構的數據,并通過遞歸的方式對這些數據進行建模。與循環神經網絡
    的頭像 發表于 07-10 17:02 ?598次閱讀

    rnn是遞歸神經網絡還是循環神經網絡

    RNN(Recurrent Neural Network)是循環神經網絡,而非遞歸神經網絡。循環神經網絡是一種具有時間序列特性的神經網絡,能夠處理序列數據,具有記憶功能。以下是關于循環神經網絡的介紹
    的頭像 發表于 07-05 09:52 ?835次閱讀

    遞歸神經網絡結構形式主要分為

    遞歸神經網絡(Recurrent Neural Networks,簡稱RNN)是一種具有時間序列處理能力的神經網絡,其結構形式多樣,可以根據不同的需求進行選擇和設計。本文將介紹遞歸神經網絡的幾種主要
    的頭像 發表于 07-05 09:32 ?778次閱讀

    簡述遞歸神經網絡的計算過程

    遞歸神經網絡(Recurrent Neural Network,簡稱RNN)是一種具有循環結構的神經網絡,其核心特點是能夠處理序列數據,并且能夠記憶之前處理過的信息。RNN在自然語言處理、語音識別
    的頭像 發表于 07-05 09:30 ?663次閱讀

    遞歸神經網絡與循環神經網絡一樣嗎

    遞歸神經網絡(Recursive Neural Network,RvNN)和循環神經網絡(Recurrent Neural Network,RNN)是兩種不同類型的神經網絡結構,它們在處理序列數據
    的頭像 發表于 07-05 09:28 ?1315次閱讀

    遞歸神經網絡主要應用于哪種類型數據

    處理(NLP) 自然語言處理是遞歸神經網絡最重要的應用領域之一。在NLP中,遞歸神經網絡可以用于以下任務: 1.1 語言模型(Language Modeling) 語言模型是預測給定詞序列中下一個詞的概率分布。
    的頭像 發表于 07-04 14:58 ?1067次閱讀

    遞歸神經網絡是循環神經網絡嗎

    遞歸神經網絡(Recurrent Neural Network,簡稱RNN)和循環神經網絡(Recurrent Neural Network,簡稱RNN)實際上是同一個概念,只是不同的翻譯方式
    的頭像 發表于 07-04 14:54 ?1247次閱讀

    遞歸神經網絡的結構、特點、優缺點及適用場景

    遞歸神經網絡(Recurrent Neural Networks,簡稱RNN)是一種具有循環結構的神經網絡,其核心特點是能夠處理序列數據,并對序列中的信息進行記憶和傳遞。RNN在自然語言處理、語音
    的頭像 發表于 07-04 14:52 ?2183次閱讀

    循環神經網絡和遞歸神經網絡的區別

    循環神經網絡(Recurrent Neural Network,簡稱RNN)和遞歸神經網絡(Recursive Neural Network,簡稱RvNN)是深度學習中兩種重要的神經網絡結構。它們在
    的頭像 發表于 07-04 14:19 ?1263次閱讀

    ESP32模組的EXT0和EXT1喚醒源都可以選擇哪些引腳?

    模組的 EXT0 和 EXT1 喚醒源都可以選擇哪些引腳?在技術文檔的哪些部分有相關說明?
    發表于 06-13 06:04
    主站蜘蛛池模板: 寄宿日记免费看 | 五月婷色| 国产精品一区二区三 | 亚洲国产精品综合久久久 | 天天躁狠狠躁夜夜躁 | 国产老肥熟xxxx | 一级骚片超级骚在线观看 | 国产视频资源 | 三级黄色录像 | 精品爱爱 | 四虎最新免费网址 | 久久久噜噜噜久久久 | 成人伊在线影院 | 波多野结衣在线观看一区二区三区 | 亚洲国产成人久久午夜 | 国产成人高清 | 操日本美女视频 | 日韩亚洲欧美日本精品va | 一级黄色片欧美 | 国产 麻豆 | xxxxbbbb欧美 | 中文字幕一区在线观看 | 淫性视频| 国产精品久久久久久久久kt | 天堂免费在线视频 | 免看乌克兰a一级 | 免看乌克兰a一级 | 色婷婷六月天 | 户外露出 自拍系列 | 天天干天天拍 | 99成人在线| 5g国产精品影院天天5g天天爽 | 色综合一区二区三区 | 色综合天天综合网站中国 | 综综综综合网 | 六月丁香六月婷婷 | 色噜噜狠狠网站 | 福利视频入口 | 久草毛片 | 久久青青草原精品老司机 | 天天视频黄 |