如何理解遞歸


 

遞歸是一個非常重要的概念,在計算機中用來表示無窮事物的一個重要手段,遞歸是一種表達相似性對象及動作的無限性構造的方法。 

 

再說遞歸之前我們先要了解迭代。

迭代:迭代是重復反饋過程的活動,其目的通常是為了逼近所需目標或結果。每一次對過程的重復稱為一次“迭代”,而每一次迭代得到的結果會作為下一次迭代的初始值,因此迭代是從前往后計算的。

遞歸:則是一步一步往前遞推,直到遞歸基礎,尋找一條路徑, 然后再由前向后計算。

簡單來說:迭代是從前往后計算的,而遞歸則是先從后往前推,然后再由前往后計算。

 

舉個例子:

計算n的階乘。

 

這里舉例計算5!

迭代:

第一步: 1!=1

第二步:2!=2*1!=2

第三步:3!=3*2!=6

第四步:4!=4*3!=24

第五步:5!=5*4!=120

 

遞歸:

第一步:5!=5*4!轉而計算4!

第二步:4!=4*3!轉而計算3!

第三步:3!=3*2!轉而計算2!

第四步:2!=2*1!轉而計算1!

第五步:1!=1  遞歸出口

然后再反向計算出結果。

 

可能大家會好奇,計算機要如何才能實現遞歸過程呢?

計算機系統里有系統棧,通過壓棧彈棧來完成這一過程,這里就不多說了。

下面兩張圖大致反映了這一過程。

壓棧與彈棧(這里計算的是4!)。

遞歸代碼的執行是按照順序來的,因為指令的執行就是按照順序來的,這一點沒啥疑問,但是遞歸代碼中返回值的傳遞卻是反過來的,這是通過系統棧這個結構來實現的。 

總結:遞歸是一個非常重要的思想,大家一定要好好理解這種思想。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM