關於遞迴的理解

2021-10-03 22:04:34 字數 1113 閱讀 9750

關於遞迴,相信很多人最初接觸的就是斐波那契數列的計算。那麼這裡就先不講解斐波那契數列,先舉乙個簡單的例子來想一想生活中的遞迴。

假設情人節馬上到了,你收到女朋友送來的禮物,禮物是乙個非常漂亮的盒子。你懷著激動的心情去拆盒子,但是第乙個盒子開啟裡面也裝著乙個盒子,然後你又開啟第二個盒子,發現裡面又是乙個盒子。嘿嘿,是不是感覺心態有點崩,最後就這樣你開啟了很多個盒子才找到禮物,發現裡面是乙個zippo打火機,開心至極。

實際上,這個找打火機的過程就引入了我們今天的主題。為了找到打火機有兩種演算法供你選擇:

方法一:

方法二:

`int test(int i)

int main(void)

在test函式中斜體部分就是遞迴終止條件,如果不寫這個條件將成為死迴圈。

下面我們來根據**具體說一下遞迴的過程(即使用呼叫棧的過程):

**呼叫棧情況

test(3);                                        3入棧

if(1 == i) -

i * test(i - 1); 2入棧

if(1 == i) -

i * test(i - 1); 1入棧

if(1 == i) 返回1

此時還有3個test函式未呼叫結束,現在開始呼叫返回:

當第乙個test呼叫結束 1出棧返回1

當第二個test呼叫結束 2出棧 返回1*2

當第三個test呼叫結束 3出棧返回2*3

所以最後的結果就是6

總的來說,整個過程也就相當於入棧出棧的過程。如果還不太清楚,可以找相關習題練習,加深理解。

關於遞迴的理解

遞迴的執行順序 最近看了一些遞迴的例子,發現呼叫遞迴之前的語句和遞迴之後的語句執行順序是正好相反的,這是給我的最大感受,具體看如下例子 遞迴例子 include void up and down int int main void void up and down int n 輸出結果 level ...

關於遞迴的初步理解

遞迴,按照執行順序來看就好像是一層又一層的空間,呼叫自身的地方是入口,條件是出口,當不滿足條件時,從出口出去,回到上一層。所以在遞迴的過程中要搞清楚當前是在哪一層,並且確認當前的引數是什麼。按照 3 層hanoi 塔來說。第一層第乙個遞迴呼叫 3,src,aux,dst 2,src,dst,aux1...

關於對hanoi塔遞迴的理解

對遞迴的理解的要點主要在於放棄 放棄你對於理解和跟蹤遞迴全程的企圖,只理解遞迴兩層之間的交接,以及遞迴終結的條件。想象你來到某個熱帶叢林,意外發現了十層之高的漢諾塔。正當你苦苦思索如何搬動它時,林中出來乙個土著,毛遂自薦要幫你搬塔。他名叫二傻,戴著乙個草帽,草帽上有乙個2字,號稱會把一到二號盤搬到任...