前言
汉诺塔 这个东西我搞了一下午,但是递归太深了,直到看到一位大佬说的只管结果,不管过程,我才幡然醒悟,我想那么多干啥,就一个递归代码 ,3个目的,qvq,浪费了一下午时间玩汉诺塔,当然我菜,有兴趣的大佬也可以去玩玩 0v0
代码
#include<stdio.h>
int j;//用于换行
// 对于汉诺塔 记住那个递归函数即可 大可不必深究
// 汉诺塔的三个步骤 目的 1 将 x 的n-1个塔移到 y 2 将 x的最底层塔移到->z 3 将y的塔全部移到->z
void move(int n,char x,char y,char z){ /目的是2 过程不用管 //n为当前的塔层数 x为移动塔 y为中间塔 z为目标塔
if(j==5){j=0;printf("\n"); }//换行
if(n==1){j++;printf("%c-->%c ",x,z);return;}//目的是2 过程不用管
move(n-1,x,z,y);// 目的是 1
if(j==5){j=0;printf("\n");}j++;
printf("%c-->%c ",x,z);
move(n-1,y,x,z); //目的是3
if(j==5){j=0;printf("\n"); }
}
int main(){
int n;
while(~scanf("%d",&n)&&n){//记得判断n不满足的情况 不然会 mle
j=0;
move(n,'A','B','C');
printf("\n");
}
}