[问题] 河内塔问题

楼主: MBS550L (li)   2020-11-11 02:11:36
大家好
小弟过几天资结期中考
正在研究河内塔的问题
刚刚使用这个网站跑程式码(文末附上)
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}
作者: springman (司布林)   2020-11-11 04:15:00
“第八行可视化后的结果是A=A B=B C=C”这时是 n=1将第一个盘子从 A 移到 C,是第一个移动的动作。有什么问题吗?
作者: LPH66 (-6.2598534e+18f)   2020-11-11 07:24:00
对于递回的一个重要观念: 每次呼叫都是独立作业呼叫自己可以想成叫另一个自己起来做事, 等他做完再继续
作者: sarafciel (Cattuz)   2020-11-11 16:26:00
https://imgur.com/wVPKTO6注意红色箭头指的是"next line to execution"所以这时候第8行还没进去 你看到的是第一次呼叫的stack

Links booklink

Contact Us: admin [ a t ] ucptt.com