递归经典“汉诺塔”

mac2024-11-09  8

#include<stdio.h> int count; void Move(int a,int b) { count++;//每移动一次就加一次 printf("%c->%c\n",a,b); } void Hanio(int n,int a,int b,int c) { if(n==1) { Move(a,c); } else { Hanio(n-1,a,c,b);//a通过c移到b Move(a,c);//再把a移到c Hanio(n-1,b,a,c);//再把b通过a移到c } } int main() { Hanio(1,‘A’,‘B’,‘C’); printf("%d\n",count); return 0; } 这是一个盘子且只需要移动一次 试一下三个的,需要移动七次 int main() { Hanio(3,‘A’,‘B’,‘C’); printf("%d\n",count); return 0; } 找一个大一点的,20个!需要1048575次。 那么n个盘子需要移动2的n次方减一。

最新回复(0)