演算法攻堅之遞迴

2021-09-24 17:25:43 字數 782 閱讀 7851

提及遞迴,我們或許有很多個理由來拒絕它:

設計不合理容易陷入死迴圈,耗盡記憶體;

迴圈的函式呼叫導致資源開銷大;

因存在對同類小規模問題的單獨處理而存在重複計算問題等等。

但不可否認的,遞迴可以使得**邏輯更加簡潔、直觀,而且針對某些複雜場景比如樹的遍歷操作,遞迴策略顯得更加適用!

對於大多數猿類來說,遞迴一直是乙個神奇的存在:有時候它很簡單,簡單到求解sum(n)(1, 2, 3, …, n這n個正整數求和);有時候它又很複雜,複雜到無從下手,**增刪改不停迴圈,最終放棄!

本文結合個人的一些經驗,以上述正整數遞迴求和問題為例來聊聊關於遞迴的一些感悟!

簡單來說,遞迴函式就是乙個函式重複進行自我呼叫,直至觸發某個條件,此時函式將返回確定的結果

既然遞迴的三個關鍵問題都已經清晰,那麼這個遞迴函式也就很容易寫出來,我們加以完善形成最終的**塊:

/* 計算1, 2, 3, ..., n 這n個正整數的和 */

intsum

(int n)

return

(n +

sum(n-1)

);}

相信看完本文的同學會有一種恍然大悟的感覺,但是文中示例僅僅是極為簡單的乙個程式,實際應用中的遞迴問題往往複雜很多。但是,無論何種遞迴問題,只要能夠解決上述三個關鍵問題,那麼最終的解決方案必將很快呈現於你我面前。

【若干遞迴問題】

《棧系列之 遞迴實現乙個棧的逆序》

演算法之遞迴

自從學了c語言,遞迴不得解。自淺學習演算法,遞迴得已解。很多書上都這麼寫的,遞迴 就是間接呼叫自己或直接呼叫自己的過程叫遞迴。話的確沒錯,初見還是較難理解,所以一般會給乙個斐波那契數列什麼的作為經典案例,不得不說我當初看的時候四個字 頭皮發麻 後來慢慢接觸多了,也不覺得如何。所謂遞迴 就是呼叫自己,...

演算法之 遞迴

遞迴在程式語言中簡單的理解是 方法自己呼叫自己 描敘遞迴就是自己呼叫自己,不過需要注意的地方,需要給定跳出條件 示例 1 簡單遞迴 public class test1 public static void fa int i system.out.println i fa i 1 描敘 什麼是三角數...

演算法之遞迴

什麼是遞迴?遞迴是一種演算法思想。從字面上看,遞迴包含兩層含義,傳遞和回歸。現實中有很多問題,只是傳遞而不用回歸。比如說,軍訓時,每天的一項訓練 報數 報數從頭到尾,依次傳遞,到最後乙個人停止,這時候軍官就知道了總體人數是多少,有沒有少人。假如,隊伍中有人想知道自己是幾號,怎麼辦呢?問下旁邊的人,如...