由汉诺塔引起的对递归的思考

  对递归的理解在于放弃,放弃对于全程的理解与跟踪,只理解递归两层之间相互的联系,以及递归终结的条件。

汉诺塔永远只有两层,最底层和上层,上层放到中间,底层放好,再把中间的放到底层上面!!!

就这样,在乱想自杀!

原文地址:https://www.cnblogs.com/rrrrrchar/p/9190618.html

时间: 2024-10-13 13:07:07

由汉诺塔引起的对递归的思考的相关文章

汉诺塔问题的Python递归实现

汉诺塔问题的python递归实现 学习python遇到的第一个问题:汉诺塔问题的实现.首先是不知道什么是汉诺塔问题,然后是不知道怎么实现.于是百度了下,结果如下: 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘 def hanoi(n,x,y,z): i

算法笔记_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; 翻译:模拟汉诺塔问题的移动规则:获得奖励的移动方法还是有可能的.

hdu1997 汉诺塔VII(DFS递归调用)

题目详情:传送门 我都要做郁闷了,逻辑一直没错,但是最后一组答案就是过不了.看了几个小时,终于发现问题所在了.我把数组初始化 memset() 函数,放在了自定义函数 Input 中,使用形参的sizeof()作为地址的长度,结果数组没有初始化成功,导致悲剧的诞生.之后我把 memset() 中的地址长度改回数组长度问题终于解决了.刚做这一题时我把它当成栈混洗了,结果一直没琢磨明白.之后在网上一查,恍然大悟.霎时间,感觉好难过,为什么自己就没想到.下面我们来分析一下本题的思路吧. 分析: 这一题

面试题 08.06. 汉诺塔问题(非递归实现汉诺塔问题)

题目: 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子.一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面).移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上. 请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子. 你需要原地修改栈. 示例1: 输入:A = [2, 1, 0], B = [], C = [] 输出:C = [2,

汉诺塔初级问题(递归实现)

汉诺塔 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 汉诺塔(又称河内塔)问题是印度的一个古老的传说. 开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A.B和C,A上面套着n个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从A棒搬到C棒上,规定可利用中间的一根B棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面. 僧侣们搬得汗流满面,可惜当n很大时这辈子恐怕就很搬完了. 聪明的

汉诺塔(Tower of Hanoi)问题的求解——利用栈与递归

汉诺塔(Tower of Hanoi)问题的求解--利用栈与递归 1. 汉诺塔问题的提法 汉诺塔问题是使用递归解决问题的经典范例. 传说婆罗门庙里有一个塔台,台上有3根标号为A.B.C的用钻石做成的柱子,在A柱上放着64个金盘,每一个都比下面的略小一点.把A柱上的金盘全部移到C柱上的那一天就是世界末日. 移动的条件是:一次只能移动一个金盘,移动过程中大金盘不能放在小金盘上面.庙里的僧人一直在移个不停,移动的最少总次数是264?1次,如果每秒移动一次的话,需要500亿年. 2. 求解汉诺塔问题的算

汉诺塔-递归

有三根柱子A,B,C A柱子上穿着N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要将所有圆盘移至C柱子,遵循以下规则: 1. 每次只能移动一个圆盘: 2. 小的上面不能放大的. 拆解问题,N个盘子,把最下面的那个大的看做地面,看成不存在,问题变为N-1汉诺塔问题 把下面两层看做不存在,就是N-2.... 方法就是: 先移动一个盘子(解决1汉诺塔问题) 在此基础上,解决2汉诺塔问题 .... .... 解决N-1汉诺塔问题 最终解决N汉诺塔问题 当然,递归是倒过来的,虽然思维是倒过来的,但实际

新版汉诺塔(UVa10795 - A Different Task)

题目介绍: 标准的汉诺塔上有n个大小各异的盘子.现给定一个初始局面(见图1),求它到目标局面(见图2)至少需要移动多少步? 移动规则:一次只能移动一个盘子:且在移动盘子之前,必须把压在上面的其他盘子先移走:基于汉诺塔问题的原始约定,编号大的盘子不得压在编号小的盘子上. Sample Input 3 1 1 1 2 2 2 3 1 2 3 3 2 1 4 1 1 1 1 1 1 1 1 0 Sample Output Case 1: 7 Case 2: 3 Case 3: 0 问题分析: 为了更好

从汉诺塔问题来看“递归”本质

汉诺塔问题 大二上数据结构课,老师在讲解"栈与递归的实现"时,引入了汉诺塔的问题,使用递归来解决n个盘在(x,y,z)轴上移动. 例如下面的动图(图片出自于汉诺塔算法详解之C++): 三个盘的情况: 四个盘的情况: 如果是5个.6个.7个....,该如何移动呢? 于是,老师给了一段经典的递归代码: 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,