汉诺塔学习笔记,有不正确的地方请小伙伴们指正~·~

1*  n=3.abc;

2*  n-1=2,acb;

3*  n-1=1,abc

1*    n=3,执行hanoi(n-1,A,C,B);

=>2*  n-1=2,acb执行hanoi(n-1,A,C,B);

=>3*  n-1=1,abc执行if(n==1)    输出(n=1)A-》c

返回2*   acb                   输出  2    a-》b执行 hanoi(n-1,B,A,C);

=》n-1=1,cab                 输出(n=1)c-》b

返回1*   abc                   输出   3   a->c

顺序执行 hanoi(n-1,B,A,C);=》n-1=2  ,bac (4*)  顺序执行hanoi(n-1,A,C,B) ;

=》n-1=1,bca                  输出  (n=1)b->a

返回4*   n=2 ,bac             输出    2    b-》c

顺序执行 hanoi(n-1,B,A,C); =》n-1=1,abc

输出    (n=1)a-》c

ps:为什么要返回4*?

猜想:n=2时,保留下来,去执行 hanoi(n-1,A,C,B);

n-1=1,

之后返回执行n=2

也可以理解为从1开始执行,像盖金字塔一样

时间: 2024-10-07 06:54:09

汉诺塔学习笔记,有不正确的地方请小伙伴们指正~·~的相关文章

韩顺平_PHP程序员玩转算法公开课(第一季)01_算法重要性_五子棋算法_汉诺塔_回溯算法_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/ 课程说明:算法是程序的灵魂,为什么有些网站能够在高并发,和海量吞吐情况下依然坚如磐石,大家可能会说: 网站使用了服务器集群技术.数据库读写分离和缓存技术(比如memcahced和redis等),那如果我再深入的问一句,这些优化技术又是怎样被那些天才的技术高手设计出来的呢? 我在上大学的时候就在想,究竟是什么让不同的人写出的代码从功能看是一样的,但从运行效率上却有天壤之别, 就拿以前在软件公司工作的实际经历来说吧, 我是

【Python学习】Python解决汉诺塔问题

参考文章:http://www.cnblogs.com/dmego/p/5965835.html 一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好! 信息时代不用信息就是罪过,直接抄不加理解与应用,就不是自己的,下次遇到还是不会,或许其中的某一个细节就能够用于各个问题的解决,共勉 学习一个东西总会遇到一些经典的问题,学习Python第二天尝试看一下汉诺塔问题,还是百度,看看解题思路,纯粹是重温初中课堂,越活越回去了 汉诺塔的图解递归算法 一.起源: 汉诺

16、蛤蟆的数据结构笔记之十六栈的应用之栈与递归之汉诺塔问题

16.蛤蟆的数据结构笔记之十六栈的应用之栈与递归之汉诺塔问题 本篇名言:"人生的价值,并不是用时间,而是用深度去衡量的." 继续栈与递归应用,汉诺塔问题. 欢迎转载,转载请标明出处: 1.  汉诺塔问题 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一

算法学习(4)----汉诺塔递归算法和非递归算法

学习<算法设计与分析基础>,习题2.4 第5题要求为汉诺塔游戏设计一个非递归的算法. 思,不得其解.看书后答案提示: 你如果做不到,也不要沮丧:这个问题的非递归算法虽然不复杂,但却不容易发现.作为一种安慰,可以在因特网上寻找答案. 好吧,话都说得这么直接了,遂百度之,得到一个感觉很好的答案,略做修改,摘录于下: 原文地址:http://blog.sina.com.cn/s/blog_48e3f9cd01000474.html ##################################

递归的学习(计算行列式、汉诺塔问题)

不过多说,直接看图. 1 计算行列式,代码如下 : 2 汉诺塔问题 刚开始学习时没有想明白下面的代码是如何进行递归的,经过手写后慢慢就理解了它是如何进行递归的,以及它执行的顺序.上图为代码(从网上搜集整理的),下图为手稿. 原文地址:https://www.cnblogs.com/whlkx/p/9165125.html

C++学习:任意合法状态下汉诺塔的移动(原创)

汉诺塔问题: 问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 现在将问题变形为:初识时,n个金盘分散摆放在三根柱子上,并且所有金盘都处于合法状态,将这些分散的金盘全部移动到第三根柱子上,并打印每一次的移动步骤以及移动后三个柱子上金盘的状态. C++实现代码如下: 1 #ifnde

汉诺塔之递归学习

汉诺塔问题: 问题描述引自:http://www.cnblogs.com/antineutrino/p/3334540.html 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘. 思维导图: 程序代码: 1 #

算法笔记_013:汉诺塔问题(Java递归法和非递归法)

目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus is possible for using animation. e.g. if n = 2 ; A→B ; A→C ; B→C; if n = 3; A→C ; A→B ; C→B ; A→C ; B→A ; B→C ; A→C; 翻译:模拟汉诺塔问题的移动规则:获得奖励的移动方法还是有可能的.

Java学习(3):递归问题(举例:汉诺塔问题)。

递归问题是编写程序中常见的问题之一.此随笔对具有明显递归的汉诺塔问题进行说明. 1 import java.util.Scanner; 2 3 /** 4 * 递归:汉诺塔 5 * 6 * @author xcx 7 * @time 2017年7月3日上午8:16:07 8 */ 9 public class Hanoi { 10 private static int i = 0; 11 12 public static void main(String[] args) { 13 int n =