在线观看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

    文章

    4338

    瀏覽量

    62738
  • 代碼
    +關注

    關注

    30

    文章

    4801

    瀏覽量

    68734
  • 遞歸
    +關注

    關注

    0

    文章

    28

    瀏覽量

    9038

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    hex可以轉成源代碼

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

    Python遞歸的經典案例

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

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

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

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

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

    遞歸神經網絡的實現方法

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

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

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

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

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

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

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

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

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

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

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

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

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

    關于C語言中的遞歸

    遞歸指的是在函數的定義中使用函數自身的方法。
    發表于 02-26 10:34 ?397次閱讀
    關于C語言中的<b class='flag-5'>遞歸</b>

    榮小菜補鈣記第61期_LabVIEW之遞歸文件及文件夾

    靈活使用。 3. 遍歷全部層級文件及文件夾_Demo 利用“羅列文件夾”函數,通過編寫一定的邏輯,可以實現返回全部層級的文件及文件夾。代碼如下?;具壿嬍潜闅v每一層級的文件夾,若仍存在文件夾,則繼續
    發表于 02-16 21:36

    電感量一樣都可以代換嗎

    電感作為電路中的重要電子元器件,它在電路中的作用主要是儲存能量和濾波。在電感使用中,我們經常會遇到有客戶咨詢關于電感替換的問題。有人問是不是電感量一樣都可以替換?本篇我們就來簡單探討以下這個問題吧
    的頭像 發表于 01-17 09:49 ?522次閱讀
    主站蜘蛛池模板: 成人夜夜| 免费又黄又硬又大爽日本| 国产好深好硬好爽我还要视频| 激情婷婷网| bt天堂在线最新版www| 亚洲天天做夜夜做天天欢人人| 午夜小福利| 日韩加勒比在线| 国产精品资源在线观看网站| 亚洲啪啪| 一区在线观看视频| 最近2018年中文字幕免费图片| 一级女人毛片人一女人| 特级淫片aaaaa片毛片| 欧美一级视频在线| 韩国电影天堂| 一级片免费视频| 深夜免费视频| 日本xxx69hd| 高清不卡免费一区二区三区| 婷婷激情综合网| 欧美黄色三级视频| 丁香五香天堂网| 手机在线观看视频你懂的| 福利体验区| 午夜三级网| 天天视频色版| 久久婷婷一区二区三区| www.色午夜| 久久精品影视| 日本免费视频| 桃色婷婷| 国产一级特黄生活片| 天天操天天射天天爽| 欧美性猛交xxxx乱大交高清| 国产高清精品自在久久| 日本精品高清一区二区2021| 丁香色婷婷| 国产小视频在线免费观看| 日本不卡在线视频高清免费| 四虎日韩|