递归实现汉诺塔问题

递归经典例题 --- 汉诺塔(图文详解) 保姆级带你了解汉诺塔 阅读详情
#include <stdio.h>

void hanoi(int n, char x, char y, char z);//将n个圆盘从x移到z,y做辅助塔
void move(char x, int n, char z);//打印移动方法

int main()
{
    hanoi(5, 'x', 'y', 'z');
    return 0;
}

void hanoi(int n, char x, char y, char z)
{
    if(n == 1)
        move(x, 1, z);
    else
    {
        hanoi(n-1, x, z, y);
        move(x, n, z);
        hanoi(n-1, y, x, z);
    }
}

void move(char x, int n, char z)
{
    printf("%d:%c-->%c\n", n, x, z);
}

汉诺塔问题:递归与非递归实现 目录 1.汉诺塔问题是什么? 2.汉诺塔问题分析 3.代码实现: 递归实现: 非递归实现(利用堆栈): 1.定义栈类: 2.定义问题栈: 3.主函数: 方式1:利用数组充当堆栈 方式2:利用单向队列充当堆栈: 非递归代码思路讲解: 1.汉诺塔问题是什么? 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍.. 阅读详情

相关推荐

经典递归解决汉诺塔问题 python实现

什么是汉诺塔? 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。转化为数学问题 如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,

weepon的博客 6427

汉诺塔游戏

汉诺塔游戏: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 #背景介绍 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的

qq_45625194的博客 1146

C++汉诺塔问题 解题思路及递归算法实现

C++汉诺塔问题 解题思路及递归算法实现 汉诺塔问题·起源 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 转自:https://zhidao.baidu.com/ 问题描述 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。

kumoue的博客 1万+

汉诺塔问题-递归实现

汉诺塔问题,递归实现

m0_68406857的博客 690

汉诺塔问题的非递归算法实现

在非递归算法设计中,栈(Stack)和队列(Queue)是最为常见的数据结构。栈是一种后进先出(LIFO, Last In First Out)的数据结构,只能在一端(称为栈顶)进行插入和删除操作。队列是一种先进先出(FIFO, First In First Out)的数据结构,支持在一端添加元素,而在另一端移除元素。对于栈而言,它适用于那些需要回溯或撤销操作的场景,例如表达式求值、浏览器的后退功能等。队列则非常适合处理按顺序排列或处理的任务,如任务调度、打印队列等。

weixin_42513928的博客 1175

递归实现:汉诺塔问题

递归应用,用于实现汉诺塔问题,源于经典故事! 主要在于递归调用!

递归实现汉诺塔

汉诺塔是一道非常经典的问题了,这道题很好地考验了我们的思维能力,可以帮助我们进一步理解递归。 首先介绍一下汉诺塔问题的背景: 汉诺塔(Tower of Hanoi),又称河内塔,源于印度的一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 关键就在于小圆盘上面不能放大圆盘且每一只能移动一个盘子。 看似简..

SAKURAjinx的博客 5115

汉诺塔问题递归算法

汉诺塔问题的递归算法,附详细代码以及运行结果,有详细的算法描述。

递归解决汉诺塔问题(原理图解+代码实现+递归讲解)

那有n个时我们仍当作两个处理。 1.把上面n-1个当作一个整体,放在mid柱子, 2.a柱一个圆盘放到c柱, 3.b柱n-1个圆盘(此时当作整体)放到c柱。

m0_74110717的博客 1165

雷达原理习题答案【西电】

  目前教材用的是陈老师新版的,但是,我发现课后题有一部分是之前某本书里的。答案如下【建议参看原题→查阅答案】 【原题点这里!!点这里!!】 目录跳转功能目前好像只支持网页版 文章目录% 第一章、第二章% 第三章% 第四章% 第五章% 第六章% 第七章% 第八章 % 第一章、第二章 % 第三章 % 第四章 % 第五章 % 第六章 % 第七章 % 第八章 ...

薛定谔的壳的博客 1万+

CAPL实战:从零构建HEX文件解析器,赋能UDS刷写

本文详细介绍了如何使用CAPL从零构建HEX文件解析器,以支持UDS刷写操作。通过解析HEX文件格式、设计状态机、优化数据结构与算法,实现高效准确的固件数据处理,并提供了与UDS刷写流程对接的工程化实践建议。

weixin_28726391的博客 444

用递归与非递归方法实现汉诺塔问题,C语言实现

用递归与非递归方法实现汉诺塔问题,C语言实现

CHINANET 3175

别再为跨页读写发愁了!STM32F407模拟I2C驱动24C256/512的避坑指南

本文详细解析了STM32F407模拟I2C驱动24C256/512的跨页写入问题,揭示了24C系列存储器'写满一页不会自动翻页'的关键机制,并提供了经过验证的分页写入算法和优化方案。通过GPIO时序优化、地址计算和错误处理等技巧,帮助开发者解决数据错乱、覆盖等常见问题,实现稳定可靠的EEPROM读写操作。

weixin_42631411的博客 377

【数据结构|汉诺塔问题】汉诺塔问题以及递归思想实现

汉诺塔游戏分析

爱喝冰红茶的方舟的博客 2039

STM32驱动电磁阀电路设计:从光耦选型到MOSFET驱动的实战解析

本文深入解析了STM32驱动24V电磁阀的完整电路设计,重点探讨了光耦选型与MOSFET驱动两大核心环节。针对电平转换与电气隔离需求,详细对比了EL357N与TLP2310等光耦在CTR、速度及耐压等关键参数上的差异与应用场景。同时,文章提供了MOSFET关键参数解读、驱动电路优化方案(如推挽驱动)以及完整的PCB布局、电源处理与调试避坑指南,旨在帮助工程师构建稳定可靠的工业控制电路。

weixin_29184371的博客 234

华硕ROG枪神双系统实战:Ubuntu安装避坑指南

本文是华硕ROG枪神笔记本安装Ubuntu双系统的详细避坑指南。针对其独特的硬件与BIOS设计,文章核心解决了VMD控制器导致硬盘无法识别、驱动兼容性等关键难题,并提供了从BIOS设置、分区方案到安装后驱动配置与性能调优的一站式解决方案,帮助用户实现稳定的双系统体验。

raspberrypi5的博客 545

递归之汉诺塔问题的Java实现

递归思想,其中最重要的大事化小的思想,递归实际上就是把一个复杂问题变成简单问题的过程。先将最上方的盘子移到C中,再将第二个盘子从A移到B中,然后将C盘中的盘子移到B中,到这里实现了上方两个盘子移到了B中,现在再将A中剩下的最大盘子移到C中,最后只要按规则使B中两个盘子移到C中即可,这里三个盘子的步骤我故意不写出来,接下来会讲为什么,我只说步骤需要7步。首先得把最上方的盘子移到B中,再将最下面的盘子移到C中,最后将B中的盘子移到C中,步骤为A -> B,A -> C,B ->C,总共需要三步。

wlldpy的博客 857

【Gin框架入门到精通系列01】Gin框架介绍与环境搭建

本文是Gin框架入门到精通系列的第一篇,系统介绍Gin框架的基本概念、核心特性以及环境搭建。无论你是Go语言新手还是有经验的开发者,都能通过本文快速掌握Gin框架的基础知识,创建并运行你的第一个Gin应用。

GopherTribe的博客 1560

汉诺塔问题详解--递归实现

汉诺塔问题详解--递归实现 汉诺塔问题来源: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 思考: 有三根柱子(A,B,C)。A柱子上面套着n个圆盘。这些圆盘...

来日浅谈的博客 1万+

qcc304x笔记之手机端显示电量(九)

默认的sdk有些安卓手机不支持电量显示,所以需要加电量显示的补丁 流程分析 1. 首先新建一个task,并将task注册给电池模块 appBatteryRegister(batteryRegistrationForm) 实现handler处理函数,当battery模块电池电量更新后,会将电池百分比值发送到本模块,然后我们就可以在handler中将实时电量同步到手机端了。 hfpAtCmdInit atCmdTask.task.handler = appAtCmdHandleM...

在云巅的博客 2201

手把手教你学Simulink--基于储能系统的建模与仿真场景:-锂电池储能系统充放电管理策略仿真

《锂电池储能系统充放电管理的Simulink建模与仿真》摘要 本文详细介绍了使用Simulink+SimscapeElectrical对锂电池储能系统进行充放电管理策略建模的全过程。从系统结构设计入手,重点阐述了锂电池模型、充放电控制器、热管理系统等核心模块的搭建方法,并提供了完整的仿真流程。文章详细说明了如何实现荷电状态管理、温度控制和功率限制等关键策略,通过仿真分析了电池电压、电流、SoC和温度等关键指标的变化规律。最后提出了基于仿真结果的优化建议,包括参数整定、算法改进等方面,为锂电池储能系统的安全高

MHD0815的博客 1万+

经典递归问题--汉诺塔(java实现)

程序调用自身的编程技巧称为递归;return 1;}else {这里就是在fac()函数内部不断调用fac函数;通过简单的代码来实现复杂过程。有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子C上每次只能移动一个圆盘,并且只能小圆片只能放在大圆盘上。汉诺塔小游戏 (fuyeor.com)总的来说:如果只有一个圆盘,只需要移动一次 : 即A->C如果有三个圆盘,则需要移动(23- 1次)次,即。

黎鹤舞828的博客 1888

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

汉诺塔问题的递归实现

// TowersOfHanoi.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> #include <chrono> void towersOfHanoi(int n, int t1, int t2, int t3) { //将t1上所有盘移到t2 if (n > 0) {

小飞将的博客 161

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【汉诺塔问题】经典递归问题(汉诺塔问题)解析(用C实现代码)

函数递归经典题目汉诺塔问题。

m0_67077469的博客 2093

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python递归实现汉诺塔问题-详解

汉诺塔问题 规则: 每次移动一个盘子 任何时候大盘子在下面,小盘子在上面 方法: n=1: 直接把A上的一个盘子移动到C上, A-&amp;gt;C n=2: 把小盘子从A放到B上, A-&amp;gt;B 把大盘子从A放到C上, A-&amp;gt;C 把小盘子从B放到C上, B-&amp;gt;C n=3: 把A上的两个盘子,通过C移动到B上去, 调用递归实现 把A上剩下的一个最大盘子移动到C上, A-&amp;gt;C 把B上两...

springhammer的博客 1705

Java递归实现汉诺塔问题

用一个简单的递归方式实现汉诺塔问题: 大家可以去4399玩一下这个游戏 具体的连接地址http://www.4399.com/flash/109504_1.htm 就是这个了 package hanNuoTa; /** * Created by xiaobai on 2019/3/10. * 汉诺塔游戏的java 实现 * @author xiaobai. * @DAT...

做你的时光机的博客 685
上一篇: 引用和指针的区别
下一篇: 栈的顺序存储
agul_
博客等级 码龄16年 69粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值