Hanoi问题的分析

问题描述

设A、B、C为三个塔座,一开始A塔座上有n个自上而下、由小到大按顺序(可编号1,2,3...n)叠放在一起的圆盘,需要把A塔座上的盘全部移动到C塔座上,并且需要保持原有的顺序,但是要求每次只能移动一个盘子,并且在移动过程中A、B、C都必须始终保持小盘在上,大盘在下,操作过程盘子可置于A、B、C任一塔座上

问题分析

在这里插入图片描述



代码实现
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);
    }
}


时间复杂度分析

在这里插入图片描述
求其时间复杂度,首先必须将T(n)求解出来 ,问题转化为求解:已知T(1)=1
T(n)=2T(n-1)+1,求T(n)

T(n)+1 = 2T(n-1)+2
↓↓
T(n)+1 = 2(T(n-1)+1) ----易得出此等比数列的构造
↓↓
公比q=2,首项T(1)=1
↓↓
T(n)=2n-1
↓↓
时间复杂度=O(2n)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值