汉诺塔问题主要需要理解的就是:无论有多少个盘子,将其分解为三个步骤
1:将初始位置A上面的n-1个盘子借助目标位置,移动到中间位置
2:将初始位置最下面的大盘子直接移动到目标位置
3:将中间位置暂存的n-1个盘子借助初始位置A移动到目标位置
这道题主要是为了描述移动过程
当只有一个盘子时,只需要将他从初始位置移动到目标位置
初始位置到目标位置从左到右依次为p,q,r
if(m==1)
{
printf("Move disk %d from %c to %c\n",m,p,r);
step++;
}
即直接将仅有的盘子从p移动到r
如果不是只有一个盘子的话,这个过程就按照以上三个步骤
将n-1个盘子借助目标位置从初始位置移动到中间位置
move(m-1,p,r,q);
即从p移动到q
虽然只有一行,但是当不满足m==1时,就会不断进行递归调用
知道完成将n-1个盘移动到中间位置
move(m-1,q,p,r);
这个语句就是将中间位置的n-1个盘子借助初始位置移动到目标位置