直接进入正题:
逻辑:
1.以第二个柱子(buffer柱)为缓冲区,先将第一个柱子(a柱)上n-1的盘子放到buffer柱
2.把a柱最后一个盘子放到第三个柱子(c柱)
3.以a柱为缓冲区,把buffer柱上面的所有盘子放到c柱上
首先需要知道这个函数的执行过程,一个规则:只有上一个函数执行完毕之后才会执行下一个函数,所以这个函数内部的执行过程也是先把move(n-1,a,c,buffer)彻底执行完毕之后才会继续向下执行。
以n=3为例
n=3 执行
move(n-1,a,c,buffer) 参数顺序变为 a,c,buffer 此时n=2
n=2 执行
move(n-1,a,c,buffer) 参数顺序变为 a,buffer,c 此时n=1
n=1 输出
a-->c
输出之后函数再次回到n=2的时候(因为在n=2的时候,第一个函数就已经有了终结的因素n=1)
n=2 执行
move(1,a,buffer,c) 输出
a-->buffer
(注意:此处当时我也没有立即反应过来怎么就输出a-->buffer了呢!后来发现当n=3的时候执行了第一个函数,n就变成了2此处执行的move(1,a,buffer,c)其实是n=3时的一个子函数,先执行了第一个函数之后,n=2了然后又执行的第二个函数,此时的参数顺序为 a,c,buffer,所以输出 a-->buffer)
因为第二个函数传入的值就是1,所以只执行一次,执行完毕之后执行第三个函数此时n=2,参数顺序为 a,c,buffer
n=2 执行
move(n-1, buffer, a, c) 参数顺序变为 c,a,buffer 此时n=1
n=1 输出
c-->buffer
输出之后回到n=3,因为n=2第三个函数执行完毕之后n=1,直接就输出了所以回到n=3,此时参数顺序为 a,buffer,c
n=3 执行
move(1,a,buffer,c) 输出
a-->c
执行完第二个函数之后执行第三个函数
n=3 执行
move(n-1, buffer, a, c) 参数顺序变为 buffer,a,c 此时n=2
(注意:当此处执行完毕之后,第三个函数还没有终结因素,所以执行到这里又会有3个函数了,执行顺序还是从第一个开始执行)
n=2 执行 第一个函数 参数顺序变为 buffer,c,a 此时 n=1
n=1 输出
buffer-->a
输出完之后再次回到n=3,此时参数顺序为 buffer,a,c
执行 第二个函数 输出
buffer-->c
输出完之后再次回到n=3,此时参数顺序为buffer,a,c
执行 第三个函数 输出
a-->c
结束。
新人,第一篇帖子!!!如有问题,请大家多多讨论