汉罗塔问题——C语言递归
#include <stdio.h>
int a=5,b=0,c=0,times=0;
void move(char start,char end,int n)
{
if(end=='c') c++;
else if(end=='b') b++;
else if(end=='a') a++;
if(start=='c') c--;
else if(start=='b') b--;
else if(start=='a') a--;
times++;
printf("第%d个圆盘:%c --> %c \n",n,start,end);
}
//a是存放圆盘的初始柱子,b作为中间柱子存放使用,c作为目标柱子,n表示从a移动到c的圆盘数
void hanoi(char a,char b,char c,int n){
if(n==1){
move(a,c,n);
}else{ //将问题进行分解处理
hanoi(a,c,b,n-1);//先把最上面的所有圆盘通过c作为中间柱,将所有圆盘从a移动到b
move(a,c,n);//然后将最下面的圆盘移动到c
hanoi(b,a,c,n-1);//将最上面的所有圆盘通过a作为中间柱,将所有圆盘从b移动到c
}
}
int main()
{
printf("游戏前%d:%d:%d\n",a,b,c);
hanoi('a','b','c',5);
printf("游戏后%d:%d:%d\n",a,b,c);
printf("总共移动%d次",times);
}
本文来自博客园,作者:TCcjx,转载请注明原文链接:https://www.cnblogs.com/tccjx/articles/16770482.html