遞迴快還是迴圈(迭代)快?

2021-09-08 10:24:07 字數 355 閱讀 1131

1.演算法抽象上所謂的迴圈(更準確點說,叫做迭代——順便,c艹有的是「迭代語句」而不是「迴圈語句」)是遞迴的特例。寫成迴圈的東西能直接轉寫成遞迴形式,反過來就得自己造活動記錄了(例如棧)。

2.遞迴呼叫需要維護活動記錄,而迭代直接復用了儲存,可以省略這些開銷,所以體系結構若執行顯式遞迴呼叫一般更慢。但這裡一般也不會慢多少,主要還是儲存空間有壓力(呼叫棧溢位)。

3.但遞迴是遞迴,因為as-if rule,實現可以優化掉(最顯著的,對符合尾遞迴形式的**進行尾呼叫優化(tco))不見得就會生成遞迴呼叫的**,所以未必更慢。只不過c艹不像scheme這樣的語言強制要求tco並且可以關掉優化所以比較容易體現。

順便,不懂as-if rule的請猛戳這裡:

學的快還是忘的快

你或許有這樣的困惑,面對層出不窮的技術,學過的東西總是很快就會忘記,這究竟是為什麼?有沒有什麼辦法能改變提公升?本文結合作者自身經歷,總結出一些要點,或許能給你一丟丟的幫助。想要提公升那就得先找到學完就忘的原因,對症下藥療效才會更好。不實踐學東西停留在眼鏡和耳朵層面,眼鏡看完耳朵聽完就完了。絕不輕易...

時間過慢還是快?

真是奇怪,很久沒有感覺生活有目標,奮鬥有動力了。不過,沒有目標的生活可真是可怕,醒來,等著睡去。毫無激情地處理每天的事情。哈,很有沒有這種感覺了吧。如果我以後是乙個管理者,或者組織者,首先我要做得事情,就是給員工希望,give them hope 這才是動力和效率的源泉吧!然後,我會給他們制定乙個計...

手寫快排 遞迴實現 棧迭代實現

快排思想 選取乙個記錄作為樞軸,經過一趟排序,將整段序列分為兩個部分,其中一部分的值都小於樞軸,另一部分都大於樞軸。然後繼續對這兩部分繼續進行排序,從而使整個序列達到有序。實現 演算法 1.選取乙個中樞key,2.將陣列,小於key的放左邊,大於key的放右邊 3.最後將key放到這個分成2組的中間...