问题是有三个插槽,n个由小到大的盘子怎么从第一个插槽移动到第三个插槽?其中小盘子只能放在大盘子上,一次只能移动一个盘子。 以3个盘子为例: 1. 1号,2号移动到第二个插槽。1->2 2. 3号移动到第三个插槽。1->3 3. 1号,2号移动到第三个插槽。2->3 其中第二步是直接可以完成的,也就是递归出口。 第一步又可以分解为: 1. 1号移动到第三个插槽。1->3 2. 2号移动到第二个插槽。1->2 3. 1号移动到第二个插槽。3->2 第三部可以同样分解: 1. 1号移动到第一个插槽。2->1 2. 2号移动到第三个插槽。2->3 3. 1号移动到第三个插槽。1->3 一共需要移动3+1+3步,n个盘子需要n+1+n步。 因为移动n个盘子同样可以以移动3个盘子为基础来理解。 从插槽1移动n个盘子到插槽3: 1. 前n-1个盘子移动到插槽二。 2. 第n个盘子移动到插槽三。 3. 前n-1个盘子在移动到插槽三。 一步完成的直接完成,不可以直接完成的按上步分解。


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;
    int move(int n,char x,char y,char z);
    printf("inter your number\n");
    scanf("%d",&n);
    move(n,'a','b','c');
    return 0;
}

int move(int n,char x,char y,char z){
    if(n==1){
        printf("%c-->%c\n",x,z);
    }
    else{
        move(n-1,x,z,y);
        printf("%c-->%c\n",x,z);
        move(n-1,y,x,z);
    }
}