【數據結構與算法】遞歸的推導和分析

經常會聽到遞歸二字,卻一直不得其法,今天來徹底搞懂它

遞歸就是方法自己調用自己,每次調用傳入不同的變量,遞歸可以讓代碼簡潔

舉例分析

1.打印問題

寫一個打印的方法,不停的調用自己
在這裏插入圖片描述
執行結果如下
在這裏插入圖片描述

圖解分析

如下圖,
在這裏插入圖片描述

  1. 執行main方法,添加第一個棧幀
  2. 第一次調用print:傳入參數4,棧中添加第二個棧幀,n=4執行到第7行的時候,if條件成立。那麼,調用print(4-1),此時已經開始遞歸(我理解的此時遞歸處於遞的階段,等到print調用結束,開始返回的時候就是遞歸的歸的過程)
  3. 第二次調用print:傳入參數3,棧中添加第三個棧幀,同理if條件成立
  4. 第三次調用print:傳入參數2,棧中添加第四個棧幀,if條件n>2,不成立,開始執行第10行代碼,打印
    在這裏插入圖片描述
  5. 打印完n=2,頂層棧幀退出,繼續執行第二層,此時n=3,(if中調用print方法令n=2,但是因爲n是局部變量,並不會影響第二層棧幀中n的值),所以打印出
    在這裏插入圖片描述
  6. 同理第三層打印出n=4,然後main方法執行完畢,退出最後一層棧幀

小結

上面的遞歸過程中,只有頂層的棧不滿足if條件,執行了第10行的打印方法,然後退出,在頂層的棧的方法執行完畢之前,第二層和第三層的棧此時都才執行到if語句中,並未執行完畢,所以當頂層棧執行完畢之後,就會依次迴歸

2.階乘問題

代碼如下
main函數
在這裏插入圖片描述
階乘方法
在這裏插入圖片描述
執行結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章