这个学期,我们开始学习数据结构和算法,有一个内容我很模糊,那就是汉诺塔问题,于是我就自己摸索着写了一点代码。
首先是利用递归的思想
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