14. 執行遞迴函數時,使用到的資料結構為
(A) stack
(B) tree
(C) queue
(D) array

答案:登入後查看
統計: A(190), B(11), C(12), D(8), E(0) #2847107

詳解 (共 1 筆)

#7089477

【解題思路】

這題在考「遞迴函式是怎麼在電腦裡執行的?」
關鍵只有一句:

遞迴=函式一直呼叫自己
→ 每呼叫一次,就要把目前的狀態暫存起來
→ 這些暫存都存放在『呼叫堆疊 Call Stack』上。

也就是:

  • 每進入一次遞迴 → push(壓入 stack)

  • 每完成一次遞迴 → pop(彈出 stack)

所以:

遞迴一定用 stack
而且只能用 stack
不會用 queue、array、tree。

【為什麼其他選項不正確(逐一破題)】

(A) stack
→ 正確!
→ 電腦的 Call Stack 用來存放:

  • return address

  • 區域變數

  • 參數

  • 前一次狀態

(B) tree
→ 遞迴常用來處理「樹」,但執行遞迴時並不是用 tree 來存資料
→ 錯。

(C) queue
→ queue 是 FIFO,用在排隊、廣度優先搜尋,不用來記錄函式呼叫。
→ 錯。

(D) array
→ array 不能自動 push/pop,也不適合當呼叫堆疊。
→ 錯。

【延伸知識】

呼叫堆疊(Call Stack)內容:

每呼叫一次函式,stack 會存:

  1. return address(回去的位置)

  2. 參數

  3. 區域變數

  4. 暫存狀態(如迴圈狀況)

當遞迴很深時 → stack 會爆掉 → stack overflow

這就是為什麼你常看到「Stack Overflow」錯誤。

【記憶技巧】

一句話:

遞迴靠 Stack,一層一層壓;
做完就彈回去。

更短:

遞迴=Stack。

【常見錯誤】

  1. 把「遞迴常用於樹 tree」誤以為「遞迴用 tree 儲存」

  2. 把 BFS 的 queue 和遞迴搞混

  3. 以為 array 裡 push/pop 就能當 stack → 但不是語意上的 call stack

0
0

私人筆記 (共 1 筆)

私人筆記#5458007
未解鎖
能夠使用遞回函式,是因為 函式堆疊(St...
(共 106 字,隱藏中)
前往觀看
2
0