小弟初学,代码如下:
#include <iostream>
using namespace std;
void hano(int n, char a, char b, char c); // 声明
int main(){
hano(3, 'A', 'B', 'C');
}
void hano(int n, char a, char b, char c){
if(n==1)
cout << a << "===>" << c << endl; // 1个则直接移动:A => C
else{
hano(n-1, a, c, b); // 以C作为temp,先把n-1个移动到B上
hano(1, a, b, c); // 以B为temp,把A最底下的一个移动到C上
hano(n-1, b, a, c); // 以A为temp,把B上面的n-1个移动到C上,完成!
}
}
小弟看了网上很多类似的解释,算法我很明白:只有一个盘子 就直接从A 移到C, 一个以上,则是秉着将n-1个盘子先移到B上,再将A上面最底层的这个盘子移到C上,最后将B上的n-1个盘子移到C上完成!这个过程当然是需要借助A B C三个位置在不同的时候充当中转站临时位置的角色。我想明白的是:在这段代码中,进行递归函数调用时,参数是怎么传递,从而一步一步输出打印移动盘子的步奏呢?求大神能劳神费力,帮小弟写一下每一步递归函数参数传递的内部过程。如此小弟便能明白递归函数和调用函数的内部细节了,拜谢拜谢....
#include <iostream>
using namespace std;
void hano(int n, char a, char b, char c); // 声明
int main(){
hano(3, 'A', 'B', 'C');
}
void hano(int n, char a, char b, char c){
if(n==1)
cout << a << "===>" << c << endl; // 1个则直接移动:A => C
else{
hano(n-1, a, c, b); // 以C作为temp,先把n-1个移动到B上
hano(1, a, b, c); // 以B为temp,把A最底下的一个移动到C上
hano(n-1, b, a, c); // 以A为temp,把B上面的n-1个移动到C上,完成!
}
}
小弟看了网上很多类似的解释,算法我很明白:只有一个盘子 就直接从A 移到C, 一个以上,则是秉着将n-1个盘子先移到B上,再将A上面最底层的这个盘子移到C上,最后将B上的n-1个盘子移到C上完成!这个过程当然是需要借助A B C三个位置在不同的时候充当中转站临时位置的角色。我想明白的是:在这段代码中,进行递归函数调用时,参数是怎么传递,从而一步一步输出打印移动盘子的步奏呢?求大神能劳神费力,帮小弟写一下每一步递归函数参数传递的内部过程。如此小弟便能明白递归函数和调用函数的内部细节了,拜谢拜谢....