算法入门(二) 递归1
一个函数调用其自身,就是递归
汉诺塔
分析:
实现这个算法可以简单分为三个步骤:
(1)把n-1个盘子由A 移到 B;
(2)把第n个盘子由 A移到 C;
(3)把n-1个盘子由B 移到 C;
从这里入手,在加上上面数学问题解法的分析,我们不难发现,移到的步数必定为奇数步:
(1)中间的一步是把最大的一个盘子由A移到C上去;
(2)中间一步之上可以看成把A上n-1个盘子通过借助辅助塔(C塔)移到了B上,
(3)中间一步之下可以看成把B上n-1个盘子通过借助辅助塔(A塔)移到了C上;
代码:
#include<iostream>
using namespace std;
void hanoi (int n,char a,char b,char c) //以b为中介。将a移动到c
{
if(n==1) //如果只有一个,直接a移到c
{
cout<<a<<"->"<<c<<endl;
return ;
}
hanoi(n-1,a,c,b); //以c为中介,将a移动到b
cout<<a<<"->"<<c<<endl; //输出a到c
hanoi(n-1,b,a,c); //以a为中介,再将b移动到c
return ;
}
int main()
{
int n;
cin>>n;
hanoi(n,'A','B','C');
return 0;
}