[問題] 河內塔問題

看板C_and_CPP作者 (uu8nc)時間3年前 (2020/11/11 02:11), 編輯推噓2(206)
留言8則, 3人參與, 3年前最新討論串3/3 (看更多)
大家好 小弟過幾天資結期中考 正在研究河內塔的問題 剛剛使用這個網站跑程式碼(文末附上) 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

11/11 04:15, 3年前 , 1F
「第八行可視化後的結果是A=A B=B C=C」這時是 n=1
11/11 04:15, 1F

11/11 04:16, 3年前 , 2F
將第一個盤子從 A 移到 C,是第一個移動的動作。
11/11 04:16, 2F

11/11 04:16, 3年前 , 3F
有什麼問題嗎?
11/11 04:16, 3F

11/11 07:24, 3年前 , 4F
對於遞迴的一個重要觀念: 每次呼叫都是獨立作業
11/11 07:24, 4F

11/11 07:26, 3年前 , 5F
呼叫自己可以想成叫另一個自己起來做事, 等他做完再繼續
11/11 07:26, 5F

11/11 16:26, 3年前 , 6F

11/11 16:26, 3年前 , 7F
注意紅色箭頭指的是"next line to execution"
11/11 16:26, 7F

11/11 16:27, 3年前 , 8F
所以這時候第8行還沒進去 你看到的是第一次呼叫的stack
11/11 16:27, 8F
文章代碼(AID): #1VgjVQCC (C_and_CPP)
文章代碼(AID): #1VgjVQCC (C_and_CPP)