問題是有三個插槽,n個由小到大的盤子怎麼從第一個插槽移動到第三個插槽?其中小盤子只能放在大盤子上,一次只能移動一個盤子。
以3個盤子爲例:
- 1號,2號移動到第二個插槽。1->2
- 3號移動到第三個插槽。1->3
- 1號,2號移動到第三個插槽。2->3
其中第二步是直接可以完成的,也就是遞歸出口。
第一步又可以分解爲: - 1號移動到第三個插槽。1->3
- 2號移動到第二個插槽。1->2
- 1號移動到第二個插槽。3->2
第三部可以同樣分解: - 1號移動到第一個插槽。2->1
- 2號移動到第三個插槽。2->3
- 1號移動到第三個插槽。1->3
一共需要移動3+1+3步,n個盤子需要n+1+n步。
因爲移動n個盤子同樣可以以移動3個盤子爲基礎來理解。
從插槽1移動n個盤子到插槽3: - 前n-1個盤子移動到插槽二。
- 第n個盤子移動到插槽三。
- 前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);
}
}