第十二周项目三用递归方法求解(6)

来源:互联网 发布:陕西水利预算软件 编辑:程序博客网 时间:2024/05/18 09:05

问题及代码:

/*  * Copyright (c) 2014, 烟台大学计算机学院  * All rights reserved.  * 文件名称:test.cpp  * 作    者:郝俊宇   * 完成日期:2014年 11 月 17 日  * 版 本 号:v1.0  *  * 问题描述:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,下面左图给出了移动方法的提示。请编制递归函数输出盘子数为4时(程序调试后,试试15个、20个,直至64个,看看会如何),移动的方案。图为盘子数为3时的输出供参考。 * 输入描述:一个数 * 程序输出: 对应的值 */ #include <iostream>using namespace std;int move(int n,char A,char B,char C);int main( ){    int n;    cout<<"输入盘子的个数:";    cin>>n;    move( n,'A','B','C');    cout<<endl;    return 0;}int move(int n,char A,char B,char C){    if(n==1)    {        cout<<A<<"-->"<<C<<endl;    }    else    {        move(n-1,A,C,B);        cout<<A<<"-->"<<C<<endl;        move(n-1,B,A,C);    }}


运行结果:

(1)3个盘子

(2)4个盘子

(3)5个盘子

知识点总结:

递归函数的应用

学习心得:

刚看到这道题感觉好难,我想了好长时间,之后参考了同学和老师的博文,但是还是没看懂,我又百度了一下,看明白了,但是还是不明白为什么A--B要写成A--C--B.

 

 

 

0 0
原创粉丝点击