hanno-----显示递归时间

有n个大小不等的中空圆盘,按照从小到大的顺序迭套在立柱A上,另有两根立柱B和C。现要求把全部圆盘从A柱(源柱)移到C柱(目标柱),移动过程中可借助B柱(中间柱)。移动时有如下的要求:
①一次只移动一个盘;
②不允许把大盘放在小盘上边;

③可使用任意一根立柱暂存圆盘。

首先将A柱上方的n-1个盘子从A柱移到B柱,此过程中C柱为中间柱;

然后将A柱省下的一个盘子移到C柱;

最后再将B柱上的n-1个盘子移到C柱,此过程中A柱为中间柱,这就变成了移动n-1个盘子的问题了。

若 n  = 1,则A-->C
    若 n >= 2,则
                 hanoi(n-1,A,C,B)    
                 A-->C
               hanoi(n-1,B,A,C) 

#include<stdio.h>
#include<time.h>
void move(char x,char y)
{
    printf("%c--->%c\n",x,y);
}
void hanno(int n,char one,char two,char three)
{
   // void move(char x,char y);
    if(n==1)
        move(one,three);
    else
    {
        hanno(n-1,one,three,two);//第n-1个要从one通过three移动到two
        move(one,three);
        hanno(n-1,two,one,three);
    }

}
int main()
{
    long op,ed;
    int m;
    while(scanf("%d",&m)!=EOF)
    {
        op=clock();
         hanno(m,'A','B','C');
         ed=clock();
         printf("递归时间为:%ldms\n",ed-op);
    }

}
3
A--->C
A--->B
C--->B
A--->C
B--->A
B--->C
A--->C
递归时间为:4ms
5
A--->C
A--->B
C--->B
A--->C
B--->A
B--->C
A--->C
A--->B
C--->B
C--->A
B--->A
C--->B
A--->C
A--->B
C--->B
A--->C
B--->A
B--->C
A--->C
B--->A
C--->B
C--->A
B--->A
B--->C
A--->C
A--->B
C--->B
A--->C
B--->A
B--->C
A--->C
递归时间为:79ms

10        递归时间为:735ms

 15        递归时间为:7375ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值