`

Hanoi--汉诺塔问题

 
阅读更多

之前一直不能理解该问题的解决办法,也理解不了整个递推的过程。特别是几句犀利的代码,让我觉得难于理解。

今天在网上看了一个视频,让我大侧大悟。其实,递推揍是找:f(n)与f(n - 1)的关系和递归终止条件。明白这点,遂去解汉诺塔问题。一切就迎刃而解了。

OK,这里我贴上C-递归算法视频教程的地址,以及Hanoi问题的解法(C语言描述)。希望能对广大难以理解递归的朋友有所帮助。

http://v.ku6.com/show/gxPrphkI4FZ_kbYb.html

/*
** File name: Hanoi.c
** Author: ZhouFeng
** Date: 2012/04/12
*/
#include <stdio.h>

void Hanoi(int n, char A, char B, char C, int *nCount);

int main(int argc, char* argv[])
{
    int nCount = 0;
    
    Hanoi(3, 'A', 'B', 'C', &nCount);
    printf("Times: %d\n", nCount);

    return 0;
}

/*
** A -- Start Peg
** B -- Aux Peg
** C -- To Peg
*/
void Hanoi(int n, char A, char B, char C, int *nCount)
{
    if(n == 1)
    {
printf("Move disk %d from %c to %c.\n", n, A, C);
++(*nCount);
return;
    }

    Hanoi(n - 1, A, C, B, nCount);
    printf("Move disk %d from %c to %c.\n", n, A, C);
    ++(*nCount);
    Hanoi(n - 1, B, A, C, nCount);
}


分享到:
评论

相关推荐

    实验八_VRML3-1移动汉诺塔

    汉诺塔(Hanoi Tower)是一个经典的数学游戏,通常用三根柱子和一堆不同大小的盘子来演示。在VRML(Virtual Reality Modeling Language,虚拟现实建模语言)中,我们可以利用其3D场景构建能力来模拟这个游戏。VRML是...

    汉诺塔 源代码 -汉诺塔小程序

    ---汉诺塔源代码--- ---汉诺塔源代码--- ---汉诺塔源代码--- ---汉诺塔源代码--- ---汉诺塔源代码---

    商业编程-源码-汉诺塔的动画TC2.0.zip

    `hanoi_tower`函数接收三个参数,表示起始柱、目标柱和辅助柱,通过递归调用来解决汉诺塔问题。 2. **递归逻辑**:在`hanoi_tower`函数中,基本思路是先将上层的n-1个圆盘从起始柱移动到辅助柱,然后将最底部的圆盘...

    hanoi-tower.rar_汉诺塔

    汉诺塔(Hanoi Tower)是一款经典的益智游戏,它基于递归算法,旨在通过一系列移动将所有盘子从一个柱子转移到另一个柱子。在这个“hanoi-tower.rar_汉诺塔”压缩包文件中,包含的是一个实现汉诺塔游戏基本功能以及...

    VB.NET---汉诺塔算法演示

    汉诺塔(Hanoi Tower)算法是计算机科学中一个经典的递归问题,它源自印度的一个传说。这个程序演示了如何用VB.NET实现汉诺塔的解决方案。VB.NET是一种基于.NET框架的面向对象编程语言,由微软公司开发,常用于创建...

    hanoi塔问题 hanoi塔问题

    哈诺伊塔问题中的日期处理与存储过程设计 在哈诺伊塔问题中,我们遇到了日期处理和存储过程设计的问题。下面,我们将详细地剖析这两个问题,并提供相应的解决方案。 一、日期处理 在日期处理中,我们需要计算每个...

    C语言课设---汉诺塔程序代码

    汉诺塔(Hanoi Tower)是一个经典的递归问题,源于19世纪的法国数学家艾德蒙·朗利。在C语言中实现汉诺塔程序,可以深入理解递归算法和函数调用的过程。汉诺塔游戏有三个柱子和一堆盘子,目标是将所有盘子从柱子A...

    商业编程-源码-汉诺塔游戏的设计.zip

    汉诺塔游戏是一款经典的逻辑与递归问题,源自印度古老传说,它在计算机科学和编程教育中占有重要地位。这个游戏的目标是将一个柱子上的所有盘子,通过另外两个柱子作为辅助,按照大小顺序从底部移动到另一个柱子上。...

    hanoi-master.rar_C汉诺塔_educationwbg

    标题"汉诺塔-master.rar_C汉诺塔_educationwbg"表明这是一个关于C语言实现汉诺塔问题的代码库。"educationwbg"可能是指教育资源或某个教育项目的一部分,旨在帮助学习者理解递归算法和汉诺塔问题。 描述中提到的...

    Hanoi-Tower.zip_汉诺塔c#_转移圆盘算法

    汉诺塔(Hanoi Tower)是一个经典的递归问题,它涉及到将一个柱子上的所有圆盘按照大小顺序,从最底部开始,通过另外两个柱子的辅助,全部转移到第三个柱子上,且任何时候都不能有较大的圆盘位于较小的圆盘之上。...

    数据结构设计--汉诺塔

    汉诺塔是一个经典的问题,源于印度的一个传说,它在数据结构设计中被广泛用来教授递归和算法思想。本报告将详细阐述如何利用数据结构来解决汉诺塔问题。 一、汉诺塔问题描述 汉诺塔问题由三个塔座A、B、C构成,塔座...

    MFC 汉诺塔的动画实现

    汉诺塔(Hanoi Tower)是一个经典的递归问题,它源于19世纪的法国数学家爱德华·卢卡斯。MFC(Microsoft Foundation Classes)是微软提供的一个C++库,用于开发Windows应用程序。本教程将详细介绍如何使用MFC来实现...

    人工智能实验报告-实验一汉诺塔问题实现

    相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠...

    C语言课程设计-实现的汉诺塔演示程序.zip

    汉诺塔(Hanoi Tower)是一个经典的递归问题,它源于印度的一个传说,涉及三个柱子和一堆大小不一的圆盘。目标是将所有圆盘从一个柱子(源柱)移动到另一个柱子(目标柱),但每次只能移动一个圆盘,并且任何时候大...

    Hanoi-Tower.rar_著名的汉诺塔

    汉诺塔(Hanoi Tower)是一个经典的递归问题,源于19世纪法国数学家爱德华·卢卡斯提出的一个智力游戏。这个问题涉及到三个柱子和一堆大小不一的圆盘,目标是将所有圆盘从一个柱子移动到另一个柱子,每次只能移动一...

    汉诺塔问题演示 代码

    汉诺塔问题是一种经典的递归算法问题,源自印度的一个古老传说。它涉及到将一堆盘子从一根柱子移动到另一根柱子,遵循以下规则: 1. 任何时候,盘子必须保持在柱子上。 2. 一次只能移动一个盘子。 3. 盘子不能被比...

    汉诺塔(hanoi)

    汉诺塔(Hanoi Tower)是一个经典的递归问题,源于19世纪法国数学家爱德华·卢卡斯提出的智力游戏。游戏的目标是将一座由大小不等的圆盘堆叠而成的塔从一个柱子(起始柱)移动到另一个柱子(目标柱),在移动过程中...

    汉诺塔演示程序(包含二叉树的演示动画)

    首先,我们来深入探讨一下汉诺塔问题及其解决方案。 汉诺塔是一个经典的递归问题,由三个柱子和一堆大小不一的圆盘组成。目标是将所有圆盘从第一个柱子移动到第三个柱子,但每次只能移动一个圆盘,并且任何时候大...

    Hanoi Tower 汉诺塔问题/c

    汉诺塔(Hanoi Tower)问题是由数学家Édouard Lucas在1883年提出的。问题描述中,有一座梵塔(梵天塔),塔内有三个座A、B、C,开始时A座上有n个盘子,最大的在下,最小的在上,形状类似一个金字塔。目标是将这n个...

    汉诺塔 java版

    在Java编程中实现汉诺塔游戏,我们可以采用递归算法来解决这个问题。 首先,我们需要创建一个Java程序,它包含一个主类,例如`HanoiTower`,在这个类中我们将定义汉诺塔游戏的核心逻辑。在`HanoiTower`类中,我们...

Global site tag (gtag.js) - Google Analytics