关于C++的递归(以汉诺塔为例)
关于C++,hanoi塔的递归问题一直是个经典问题,我们学习数据结构的时候也会时常用到,
因为它的时间复杂度和空间复杂度都很高,我们在实际的应用中不推荐使用这种算法,移动n个盘子,
需要2的n次幂减一步,例如:5个盘子,31步;10个盘子,1023步。
下面,是我整理的有关C++递归的代码实现过程,希望对大家的学习有所帮助。
- #include <iostream>
- using namespace std;
- //第一个塔为初始塔,中间的塔为借用塔,最后一个塔为目标塔
- int step=1;//记录步数
- void move(int n,char from,char to) //将编号为n的盘子由from移动到to
- {
- cout<<"第 "<<step++<<" 步:将"<<n<<"号盘子"<<from<<"--------"<<to<<endl;
- }
- void hanoi(int n,char from,char denpend_on,char to)//将n个盘子由初始塔移动到目标塔(利用借用塔)
- {
- if (n==1)
- move(1,from,to);//只有一个盘子是直接将初塔上的盘子移动到目的地
- else
- {
- hanoi(n-1,from,to,denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
- move(n,from,to); //将剩下的一个盘子移动到目的塔上
- hanoi(n-1,denpend_on,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上
- }
- }
- int main()
- {
- cout<<"请输入盘子的个数:"<<endl;
- int n;
- scanf("%d",&n);
- char x='A',y='B',z='C';
- cout<<"盘子移动过程如下:"<<endl;
- hanoi(n,x,y,z);
- return 0;
- }
关于C++的递归(以汉诺塔为例)的更多相关文章
- Python递归实现汉诺塔
Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1): print(x,'--->',z) else: f3(n-1,x,z,y) print(x,'--->' ...
- Go基础之函数递归实现汉诺塔
Go递归实现汉诺塔 package main import "fmt" // a 是源,b 借助, c 目的长度 func tower(a, b, c string, layer ...
- C#递归解决汉诺塔问题(Hanoi)
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...
- java利用递归实现汉诺塔算法
package 汉诺塔; //引入Scanner包,用于用户输入 import java.util.Scanner; public class 汉诺塔算法 { public static void m ...
- c++迭代递归实现汉诺塔(5种迭代方法满足你)
#include <iostream> //从A到C using namespace std; int n; void ready() { cout << "请输入汉 ...
- 零基础入门学习Python(24)--递归:汉诺塔
知识点 这节课主要讲解用递归的方法,实现汉诺塔的解答 对于游戏的玩法,我们可以简单分解为三个步骤: 1) 将前63个盘子从X移动到Y上. 2) 将最底下的第64个盘子从X移动到Z上. 3) 将Y上的6 ...
- js递归解决汉诺塔问题
汉诺塔是一个印度的古老传说.有三个圆柱,其中一个圆柱上放着若干圆盘,这些圆盘从上到下,直径递增,利用一个辅助圆柱,将原来柱子上的圆盘放到另一个柱子上,依旧是从上到下直径递增. 汉诺塔是一个经典的递归案 ...
- python数据结构_递归_汉诺塔问题
已经不是第一次写这个汉诺塔问题, 其实递归还真是不太好理解, 因为递归这种是想其实有点反人类, 为什么? 因为不太清楚, 写个循环一目了然, 用递归其实要把核心逻辑理清楚, 要不根本没法进行下去 所有 ...
- C语言:使用递归解决汉诺塔问题。
//汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...
- C++ 递归实现汉诺塔
C++实现汉诺塔 #include <iostream> using namespace std; void move(int n,char x,char y,char z) { ) { ...
随机推荐
- rabbitMQ学习(四)
按照routing key接收信息 发送端: public class EmitLogDirect { private static final String EXCHANGE_NAME = &quo ...
- Excel实用技巧
情景:有时候,我们写了一个公式,然后想在其他行也套用这个公式,一般人都是把鼠标放在那个公式所在的单元格的右下角,然后往下拉,数据量少的时候还好,数据量大的时候就不太好操作了,此时,我们需要一个好方法. ...
- shell生成随机数的几种方法
一.通过内部系统变量($RANDOM) 生成0-32767之间的整数随机数,若超过5位可以加个固定10位整数,然后进行求余. [root@web01 scripts]# echo $RANDOM [r ...
- Linq的一些很方便的方法
Aggregate Aggregate我用的最多的地方就是拼接字符串,打个比方来说,如果有数组,想要的结果是在他们之间插入一个","然后返回拼接以后的新字符串. 常规的做法是: L ...
- 基于angular写的一个todolist
对于新手来说,使用angularjs写一个todolist可以快速入门
- java提高篇之理解java的三大特性——多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- 【原】jQuery与CSS自动生成验证码
模板: <button class="r receive_code">获取验证码</button> <span class="r code& ...
- Perl爬取江西失信执行
#! /usr/bin/perl use strict; use Encode qw(encode decode); binmode(STDIN,":encoding(utf8)" ...
- sftp上传 - 待完
1.搭建本地sftp 1.1.下载msftpsrvr.exe软件 下载地址:http://www.download3k.com/Install-Core-FTP-Mini-SFTP-Server.ht ...
- C#多线程的异步委托/调用
C#异步调用(Asynchronou Delegate) C#异步调用获取结果方法:主要有三种,也可以说是四种(官方说四种,电子书说三种),官方在MSDN上已经有详细的说明:链接 需要了解到获取异步执 ...