递归算法——汉诺塔问题

来源:互联网 发布:wp.js 编辑:程序博客网 时间:2024/06/06 10:31


题目

菱形塔(假设为A)上有64个金圆盘,尺寸依次减小。圆盘按照尺寸从大到小的顺序自底向上排列。除了A塔外,还有另外的B塔和C塔。现在利用C塔作为中间存放容器,将A塔上面的圆盘移动到B塔上。每次只能移动一个,且不允许将圆盘放置在尺寸比它更小的圆盘之上。


分析

此问题可以通过递归予以解释。假设A上的圆盘数为n,要将A上最大的圆盘置于B的底部,首先需要将n-1个圆盘置于C塔上,然后将最大的圆盘移动到B。剩下的任务即是将C塔上面的n-1个圆盘移动到B塔上。因为现在B塔底部的圆盘大于所有C塔上的圆盘,故可以忽略不计。于是形成一个递归问题。

设函数Hanoi(int n,char A,char B,char C)

其中n为初始A塔上的圆盘数。Hanoi函数的目的是将这n个圆盘从A移动到B。


程序

#include "iostream"using namespace std;void Hanoi(int n, char A, char B, char C){if (n > 0){Hanoi(n - 1, A, C, B);//先将n-1个圆盘从A移动到Ccout << "move top disk from tower " << A << " to top of tower " << B << endl;//将A底部最大的圆盘从A移动到BHanoi(n - 1, C, B, A);//最后将C上的n-1个圆盘移动到B}}


0 0
原创粉丝点击