汉诺塔
3个柱子和3个大小不同的盘子构成
规则:自始至终大盘子必须保证在小盘子之下
每次只能移动一个盘子
递归思想在于把问题简单化
我们假设只有两个盘子
有了这个思想
我们可以假设有N个盘子
最大的为1个 剩下的N-1为一个
设A B C三个柱
A为起始柱 C为目标柱
要将A上的所有盘子移到C
首先得先将N-1个盘子移动到B
这时就牵扯到N-1个盘子的移动 这时目标柱就为B 辅助柱为C
我们可以得出
hanoi(int n,char start,char spt ,char target)
{
hanoi(n-1,start,target,spt)
}
移动完成N-1个盘子后我们完成后续动作将最大的盘子移动到C
接下来我们要将第N-1个盘子移动到C则需要把N-2个盘子移动到A柱
此时目标柱子为C 辅助柱为A
则扩展函数
{
hanoi(n-1,start,target,spt)
hanoi(n-1,spt,start,target)
}
当目标柱重新为C时 该函数已经达到我们的预期
为了方便观察现象加入元素i记录动作
#include <stdio.h>
void hanoi(int n,char start,char smb, char target)
{
static i=1;