递归书写hanoi汉诺塔

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

面对此问题c语言用递归可实现,因外根据规则,只能实现小的放在大的上面,而且要实现转移,可以把另一个当做转移中介,比如有n个盘子,把n-1个放置在转移中介的柱子上,把第n个即最大的那个盘子放置在目的柱子,由递归可成n-2、n-3,由此可得代码
`#include<stdio.h>

void hanoi(int n,char A,char B,char C){
if(n==1)
printf("%c->%c\n",A,C);
else{
hanoi(n-1,A,C,B);
printf("%c->%c\n",A,C);
hanoi(n-1,B,A,C);
}
}

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
hanoi(n,‘A’,‘B’,‘C’);
}
return 0;
} `
但是实现题目中的64个盘子的转移,在时间上可不允许的
实现64个盘子转移需要转移2^64-1次,就算一秒中移动一个盘子也需要的时间也难以计量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值