算法入门(二) 递归1

算法入门(二) 递归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;
}

发布了10 篇原创文章 · 获赞 7 · 访问量 339

猜你喜欢

转载自blog.csdn.net/weixin_44026026/article/details/102982058