成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

遞歸代碼都可以轉為非遞歸嗎 ?

開發 前端
我們知道將遞歸調用全部展開后其實會形成一棵樹,把遞歸轉為非遞歸無非就是在遍歷這棵樹,那么遍歷樹就有很多技術了。

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

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

說會遞歸轉為非遞歸這個話題,更理論一些的解釋是這樣的,不管是遞歸還是非遞歸,這兩者都是圖靈完備的,既然是圖靈完備,那么它們在表達能力上就是等價的,不存在誰不能轉為誰的問題。關于圖靈完備參考這篇《計算機科學中那些有趣的事實》。

只不過這存在一個難易程度的問題。大家都知道尾遞歸最容易轉為非遞歸的迭代形式,本質上是這棵樹不是多叉的而是單叉的,單叉的不就退化成鏈表了嘛,遍歷鏈表當然是簡單的,但如果是多叉的話問題就沒那么簡單了,這里最有趣的是不存在一種模板可以讓我們直接用套路的形式把遞歸轉為非遞歸,因此這里存在一個問題:為什么你要把遞歸轉為非遞歸呢?

因為最終你會發現將遞歸轉為非遞歸無非就是你自己接手了編譯器本來已經替你完成的工作,你會發現自己在手動模擬函數調用。

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

責任編輯:武曉燕 來源: 碼農的荒島求生
相關推薦

2023-04-03 09:44:18

2024-11-29 14:50:45

2020-12-07 14:58:50

程序員開源開發者

2009-11-12 09:51:11

Visual C++項

2014-09-24 13:04:13

微信企業號

2021-09-15 07:40:50

二叉樹數據結構算法

2013-07-04 09:46:06

X Phone

2011-06-17 14:36:50

Linux

2022-03-07 10:27:03

Linux開源社區

2023-03-20 18:34:02

營銷大促質量保障穩定性

2013-04-08 12:41:35

JavaScriptJS

2015-07-13 09:26:12

程序員軟技能測驗

2009-11-18 15:05:56

PHP遞歸數組

2020-05-27 07:38:36

尾遞歸優化遞歸函數

2022-10-10 08:13:16

遞歸通用代碼

2022-03-11 11:40:26

AI數據技術

2012-11-15 11:00:00

2023-07-06 14:43:46

數字化轉型數據資源

2018-12-04 21:38:33

2019-08-09 10:35:54

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人日b视频 | 日韩高清成人 | 久久亚洲欧美日韩精品专区 | 久久伊| 国产精品视频观看 | 精品综合视频 | 日韩中文字幕在线视频 | 国产亚洲精品久久久久久牛牛 | 91福利电影在线观看 | 国产97视频在线观看 | 欧美亚洲日本 | 国产亚洲精品久久久久久豆腐 | 欧美一级大片免费观看 | 国产成人午夜电影网 | 黄色网址在线播放 | 精品视频一区二区三区 | www亚洲精品 | 欧美精品1区| 精品成人| 欧美成人精品在线观看 | 中文在线播放 | 秋霞a级毛片在线看 | 国产精品久久久久久久久久软件 | 欧美精品一二三 | 久久成人精品视频 | 日韩综合在线播放 | 国产av毛片 | 欧美在线一区二区三区 | 国产成人综合亚洲欧美94在线 | 欧美一区二区三区四区在线 | 欧美日韩在线看 | 国产精品伦一区二区三级视频 | 看片地址| 人人干97 | 涩涩视频在线观看免费 | 久久伊人免费视频 | 国产午夜久久久 | 在线一区二区三区 | 亚洲性人人天天夜夜摸 | 在线色| 精品一二三区在线观看 |