第四章函数--函数进阶(递归函数)项目3汉诺塔

来源:互联网 发布:轻薄的游戏本知乎 编辑:程序博客网 时间:2024/05/17 04:45
上机内容:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。
有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,
3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,下面左图给出了移动方法的提示。
请编制递归函数输出盘子数为4时(程序调试后,试试15个、20个,直至64个,看看会如何),移动的方案。
     右图为盘子数为3时的输出供参考
                    
上机目的:递归函数编程练习
我的程序:
/*  * 程序的版权和版本声明部分:  * Copyright (c) 2013, 青岛农业大学理信学院  * All rights reserved.  * 文件名称:汉诺塔.cpp  * 作    者:幻影行者  * 完成日期:2013 年 8 月 5 日  * 版 本 号:v1.0  * 对任务及求解方法的描述部分:   * 问题描述:如上   */#include<iostream>using namespace std;void plate_move(int plate_num,char a,char b,char c); //函数声明,将数量为plate_num的盘子从a座经b座移动到c座int main(){int n;    cout<<"输入移动的盘子数:"<<endl;cin>>n;cout<<"移动的方案为:"<<endl;    plate_move(n,'a','b','c');return 0;}void plate_move(int plate_num,char a,char b,char c) {if(plate_num==1){cout<<a<<"--->"<<c<<endl;    return;}else{plate_move(plate_num-1,a,c,b); //先将数量为plate_num-1的盘子从a座经c座移动到b座cout<<a<<"--->"<<c<<endl;      //再将剩下的一个盘子从a座移动到c座plate_move(plate_num-1,b,a,c);  //然后将数量为plate_num-1的盘子再从b座经a座移动到c座,递归,完成移动return;}}

运行结果:

原创粉丝点击