14. 執行遞迴函數時,使用到的資料結構為
(A) stack
(B) tree
(C) queue
(D) array
答案:登入後查看
統計: A(190), B(11), C(12), D(8), E(0) #2847107
統計: 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 會存:
-
return address(回去的位置)
-
參數
-
區域變數
-
暫存狀態(如迴圈狀況)
當遞迴很深時 → stack 會爆掉 → stack overflow。
這就是為什麼你常看到「Stack Overflow」錯誤。
【記憶技巧】
一句話:
遞迴靠 Stack,一層一層壓;
做完就彈回去。
更短:
遞迴=Stack。
【常見錯誤】
-
把「遞迴常用於樹 tree」誤以為「遞迴用 tree 儲存」
-
把 BFS 的 queue 和遞迴搞混
-
以為 array 裡 push/pop 就能當 stack → 但不是語意上的 call stack
0
0