hanoi塔问题:
1.规则:一次移动一个盘子,小盘子压大盘子上面,有A、B、C三个柱子,A是起始放盘子的柱子,B是中间可以借助的柱子,C是最后放盘子的位置
2.简单思路:
如果有1个盘子,就是将这一个盘子直接从A->C
-->
如果有两个盘子,就是将上面的小盘子先放在B上面,再将下面的大盘子放在C上面,最后再将放在B上面的小盘子放到C上面
--->--->
--->
如果有n个盘子,就是将上面的n-1个小盘子放在B上面,再将下面的大盘子放在C上面,最后再将放在B上面的n-1个小盘子放到C上面
--->--->
--->
3.代码:
总结就是三步走:
第一步:
hanoi(n-1,A,C,B)//先将n-1个小盘子从A挪到到B,借助于C
第二步:
printf("%c->%c",A,C)//将最下面的大盘子直接挪到C上面,此时可以打印出来
第三步:
hanoi(n-1,B,A,C);//再将在B上面的n-1个小盘子挪到C上面借助于A
完整代码:(不要忘记递归的结束条件哦)
id hanoi(int n,char A,char B,char C) {
if (n==0) {
}
else {
hanoi(n - 1, A, C, B);
printf("%c->%c ",A,C);
hanoi(n - 1, B, A, C);
}
}
int main() {
hanoi(3,'A', 'B', 'C');
return 0;
}