从零到有--汉诺塔从三个柱子到更多柱子的算法优化

这篇博客讲述了作者从零开始学习数据结构和算法,聚焦于汉诺塔问题的优化解法。通过递归思想,作者首先解决了三根柱子的汉诺塔问题,然后扩展到四根、五根柱子,使用两个额外的缓存区来减少移动次数,从而实现更优的解决方案。随着柱子数量增加,执行效率提高,但具体的最优时间复杂度关系尚未完全理解。
摘要由CSDN通过智能技术生成

这个学期,我们开始学习数据结构和算法,有一个内容我很模糊,那就是汉诺塔问题,于是我就自己摸索着写了一点代码。
首先是利用递归的思想
F(n)=F(n-1)*2+1
即每次移动第n个只需要先移动前n-1个到缓存区,再把第n个移到目标柱子,再把前n-1个移到目标柱子就行了

// A code block
#include<stdio.h>
void hanoi(char source,char helper,char target,int n){
  if(0==n)
   return ;
  if(1==n)
  printf("%c->%c\n",source,target);
else
   {
   hanoi(source,target,helper,n-1);//先移动前n-1个到缓存区
   printf("%c->%c\n",source,target);
   hanoi(helper,source,target,n-1);//再把前n-1个移到目标柱子
  return ;
}
}

int main(){
  hanoi('a','b','c',3);
  return 0;	
} 

上面是我大一的时候写的,说实话,我现在才理解,递归中每一个层次都可以很简单的按步骤执行。

不必复杂化 “hanoi(source,target,helper,n-1);//先移动前n-1个到缓存区”

在第n层,我能具体写出的就是 printf第n步,其他的都属于上一层的内容,那么我只需要调用上一层就行了。

但是我们这学期讲的是优解算法,所以我们需要进一步思考
下面是四根柱子的时候。

// A code block
#include<s
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值