递归思想----汉诺塔问题

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?https://www.bilibili.com/video/av9830115

 

2:  A-->B    ,A-->C    ,B--->C

3.    

 

上面的两块当做整体,放到B ,把 最底下的放到 C 

递归思想:

n :  把 上面的 n-1 看成整体,放大 B ,把最底下的放到 C:

void  Hanoi(  int  n ,char A ,char  B,char  C){//  A: 起点  B:辅助点  C  :终点。

  //递归结束条件  n=1 只有一个盘子,直接放到 C

if(n==1){

   move (A,C); //printf( %c -----> %c,A,C)'

}else{// n-1 

  Hanoi(n-1  ,A,C,B);//  把 C  当做辅助点  ,把 A 上面的n-1 块移动到B   :把 A 上面的n-1 绕过 C 放到 B   

  move(A,C);//把 A 最下面的放到C      printf(" %c -----> %c",A,C);

 Hanoi(B,A,C);把  A  当做辅助点   把B 上面的n-1 绕过A 放到C   

}

 

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值