作者MBS550L (uu8nc)
看板C_and_CPP
標題[問題] 河內塔問題
時間Wed Nov 11 02:11:36 2020
大家好
小弟過幾天資結期中考
正在研究河內塔的問題
剛剛使用這個網站跑程式碼(文末附上)
http://pythontutor.com/cpp.html#mode=display
卻發現有一個地方很奇怪
為何第七步驟明明還在呼叫第八行的函式hanoi(n-1,A,C,B)
而第八行可視化後的結果是A=A B=B C=C
有大大能幫我解答嗎 我卡了好久..
==============================
1#include <stdio.h>
2
3void hanoi(int n, char A, char B, char C) {
4 if(n == 1) {
5 printf("Move sheet from %c to %c\n", A, C);
6 }
7 else {
8 hanoi(n-1, A, C, B);
9 hanoi(1, A, B, C);
10 hanoi(n-1, B, A, C);
11 }
12}
13
14int main() {
15
16 hanoi(3, 'A', 'B', 'C');
17 return 0;
18}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.79.84 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1605031898.A.30C.html
推 springman: 「第八行可視化後的結果是A=A B=B C=C」這時是 n=1 11/11 04:15
→ springman: 將第一個盤子從 A 移到 C,是第一個移動的動作。 11/11 04:16
→ springman: 有什麼問題嗎? 11/11 04:16
推 LPH66: 對於遞迴的一個重要觀念: 每次呼叫都是獨立作業 11/11 07:24
→ LPH66: 呼叫自己可以想成叫另一個自己起來做事, 等他做完再繼續 11/11 07:26
→ sarafciel: 注意紅色箭頭指的是"next line to execution" 11/11 16:26
→ sarafciel: 所以這時候第8行還沒進去 你看到的是第一次呼叫的stack 11/11 16:27