汉诺塔问题(经典递归算法)

#include <stdio.h>




void move( int n , char x ,char y )//将第n号盘子从棒x移动到棒y
{
printf("将第%d号盘子从棒%c移动到棒%c\n",n,x,y);
}
/*
递归思路: 
假设A,B,C三根棒,初始状态时,A棒上放着若干个圆盘(n个),将其移动到C棒上,中途可以在B棒中暂时放置圆盘。;
(1)如果只有一个圆盘,则把该圆盘从A放到C完成任务。
(2)如果圆盘个数n>1,移动圆盘的过程可以分为三步:
第一步:将A棒上的n-1个圆盘移动到B棒上;
第二步:将A棒上的一个圆盘(原本的第n个圆盘)移动到C棒上;
第三步:将B棒上的n-1个圆盘移动到C棒上。
*/


/************************************************************************/
/*
   void moveHanoi ( char A , char B , char C , int n) A,B ,C 分别代表棒符(A,B,C取值为  'A','B','C'中的任意)
函数意义:将棒A中的n个盘子借助棒B放入棒C                                                                */
/************************************************************************/


void moveHanoi ( char A , char B , char C , int n)
{
if ( n == 1 )//如果只有一个圆盘,则把该圆盘从A放到C完成任务。
{
move(1,A,C);
}
else 
{
//如果圆盘个数n>1,移动圆盘的过程可以分为三步:
moveHanoi(A,C,B,n-1);//第一步:将A棒上的n-1个圆盘移动到B棒上;
move(n,A,C);//第二步:将A棒上的一个圆盘(原本的第n个圆盘)移动到C棒上;
//第三步:将B棒上的n-1个圆盘移动到C棒上。
moveHanoi(B,A,C,n-1);


}


}




int main()
{   
moveHanoi('A','B','C',3);
return 0 ;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值