C++之汉诺塔实例代码

来源:爱站网时间:2022-12-22编辑:网友分享
小编今天给大家讲解下C++之汉诺塔实例代码的详细内容,主要介绍了C++中数据结构的递归应用等方面的知识点,有兴趣的话就来了解了解,相信这篇文章对你会有不小的帮助。

C++ 实现汉诺塔的实例详解

前言:

有A,B,C三塔,N个盘(从小到大编号为1-N)起初都在A塔,现要将N个盘全部移动到C塔(按照河内塔规则),求最少移动次数以及每次的移动详细情况。

要求:

需要采用递归方法和消除尾递归两种方法编写。

盘数N由用户从标准输入读入,以一个整数表示,然后请调用两个方法按照下面例子所述分别在屏幕中输出结果(正常情况下一个输入数据会显示同样的输出结果2次)。

实现代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35 

#include<iostream>

using namespace std;

void move(int count,char start='a',char finish='b',char temp='c')

{

 if(count>0)

 {

  move(count-1,start,temp,finish);

 cout<<"Move "<<count<<" from "<<start<<" to "<<finish<<endl;

 move(count-1,temp,finish,start);

 }

}

void move_without_recursion(int count,char start='a',char finish='b',char temp='c')

{

 char swap;

 while(count>0)

 {

  move_without_recursion(count-1,start,temp,finish);

 cout<<"Move "<<count<<" from "<<start<<" to "<<finish<<endl;

 count--;

 swap=start;

 start=temp;

 temp=swap;

 }

}

int main()

{

 int count;

 cout<<"please enter the number:";

 cin>>count;

 cout<<"递归方法运行过程:"<<endl;

  move(count);

  cout<<"消除尾递归方法运行过程:"<<endl;

  move_without_recursion(count);

return 0;

}

如果你对C++之汉诺塔实例代码还有疑问,可以来询问小编,js.aizhan.com平台所提供的各种技术内容都值得你们去学习,需要这些知识点的小伙伴记得收藏下网站,可以随时翻阅。

上一篇:C++中的cerr和cout有什么区别

下一篇:C++之友元的使用方法

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载