递归解决汉诺塔问题

用递归算法的来解决汉诺塔问题 汉诺塔 汉诺塔是一个发源于印度的益智游戏,也叫河内塔。相传它源于印度神话中的大梵天创造的三个金刚柱,一根柱子上叠着上下从小到大64个黄金圆盘。大梵天命令婆罗门将这些圆盘按从小到大的顺序移动到另一根柱子上,其中大圆盘不能放在小圆盘上面。当这64个圆盘移动完的时候,世界就将毁灭。 汉诺塔问题源于印度神话 那么好多人会问64个圆盘移动到底会花多少时间?那么古代印度距离现在已经 阅读详情

前言

先来看两个有趣的故事

  • 从前有座山,山上有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事讲的是从前有座山,山上有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事讲的是从前有座山,山上有座庙。。。
    • 问:GNU全称是什么?
    • 答:GNU is Not UNIX
    • 问:第一个单词GNU的全称是什么?
    • 答:GNU is Not UNIX
    • 问:第一个单词GNU的全称是什么?
    • 答:GNU is Not UNIX
    • 。。。

类似于上述这种使用自己来定义自己的结构,称之为递归。

递归思想很有意思,在很多方面都有实际的用途。在计算机编程中,对于一些特定的问题,常规方法往往会显得很繁琐,抓不住问题的本质,这种时候采用递归的思想编程,往往能够写出很优雅的代码。

汉诺塔问题

“汉诺塔”是由数学家爱德华 · 卢卡斯于1883年发明的游戏,爱德华当初用了一个神话来描述这个问题

传说越南河内某间寺院有三根银棒,上串 64 个金盘。寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子;预言说当这些盘子移动完毕,世界就会灭亡。这个传说叫做梵天寺之塔问题(Tower of Brahma puzzle)。

—— 维基百科

这个问题被数学抽象描述就是

  • 问题:有3根细柱子(A、B、C),其中A柱子上有64个圆盘,64个圆盘按照从上到下由小到大的次序排列。求一共需要移动多少次才能将A柱子上的64个圆盘全部移动到B柱子上?
  • 移动规则(移动前、移动中、移动后,都必须遵循)
    • 一次只能移动柱子最上端的一个圆盘
    • 小圆盘上面不能放大圆盘

对于64个圆盘问题,太复杂太庞大了。可以先从最小的情况开始考虑

一层汉诺塔

算法图解如下

一层汉诺塔图解

规律:

  • 将1个圆盘,从A柱子移动到B柱子

记作: A→B A → B

两层汉诺塔

算法图解如下

两层汉诺塔图解

规律:

  • 将2-1个圆盘,从A柱子移动到C柱子
  • 将第2个圆盘,从A柱子移动到B柱子
  • 将2-1个圆盘,从C柱子移动到B柱子

记作:

  • A→C A → C
  • A→B A → B
  • C→B C → B
三层汉诺塔

算法图解如下

三层汉诺塔图解01

三层汉诺塔图解02

规律

  • 将3-1个圆盘,从A柱子移动到C柱子(第1次~第3次)
  • 将第3个圆盘,从A柱子移动到B柱子(第4次)
  • 将3-1个圆盘,从C柱子移动到B柱子(第5次~第7次)

记作:

  • A→B,A→C,B→C A → B , A → C , B → C
  • A→B A → B
  • C→A,C→B,A→B C → A , C → B , A → B
规律一

由于第四层汉诺塔整个算法图解过程已经很长了,所以这里就不列举了。不过,从前面三层汉诺塔图解算法中,我们足以发现了n层汉诺塔移动的一般性规律

  • 将n-1个圆盘,从A柱子移动到C柱子
  • 将第n个圆盘,从A柱子移动到B柱子
  • 将n-1个圆盘,从C柱子移动到B柱子

我们将上述三个步骤,调换一下顺序

  • 将n-1个圆盘,从A柱子移动到C柱子
  • 将n-1个圆盘,从C柱子移动到B柱子
  • 将第n个圆盘,从A柱子移动到B柱子

调换顺序之后的发现,其实第一步和第二步合起来,便是将n-1个圆盘从A柱子移动到B柱子上 。

因此,算法可以进一步简化为

  • 将n-1个圆盘,从A柱子移动到B柱子
  • 将第n个圆盘,从A柱子移动到B柱子

将n-1个圆盘从A移动到B的过程,就是将n-2个圆盘从A移动到B,与将第n-1个圆盘从A移动到B;将n-2个圆盘从A移动到B的过程,就是将n-3个圆盘从A移动到B,与将第n-2个圆盘从A移动到B;……;将1个圆盘从A移动到B的过程,就是将第1-1个圆盘从A移动到B,与将第1个圆盘从A移动到B。

很明显,这样的一个过程,就是递归。在整个递归过程中,无论从第几层开始,最后会终止于一个确定的步骤——将1个圆盘从A移动到B,而每一层最关键的一个确定步骤就是——将第n个圆盘从A移动到B。因此整个递归过程其实都是在做一件事情——将1个圆盘从A移动到B !

规律二

由规律一,我们可以得知,整个递归过程中都是在重复做一件事情——将1个圆盘从A移动到B。但事实上,一旦圆盘数目超过1个时,就需要一个借助3根柱子中的一根作为中转站,通过折中的方法实现将圆盘从A的移动到B。

  • 将n-1个圆盘,从A柱子移动到C柱子
  • 将第n个圆盘,从A柱子移动到B柱子
  • 将n-1个圆盘,从C柱子移动到B柱子

由上述总结规律可知,这样的一个过程,起到中转站的作用的柱子似乎就是C柱子。

但是事实上绝不是这样,很多情况下,起到中转站作用的柱子不是绝对的!

分析一个最具代表的模型,三层汉诺塔的表达式

  • A→B,A→C,B→C A → B , A → C , B → C
  • A→B A → B
  • C→A,C→B,A→B C → A , C → B , A → B

从整个算法过程来看,以B为中转站能够将2个盘子从A移动到C,以A为中转站能够将2个盘子从C移动到B。在更多层的汉诺塔算法过程中,往往是A、B、C都会对某一段过程起到中转站的作用,因此使用中转站的概念来抽象出基本表达式是难以把握的。

因此,这里建议采用了一种目标柱子的概念(没听过对吧,我自创的)来理解上述的过程。

  • 首先,将算法中最特殊的一个步骤——从A移动到B,看做本次移动的目标柱子是B,因此在这样一个步骤中, → → 右边出现最多的就是B
  • 接着,第一步算法中的所有移动的目标柱子就是C,因此第一步算法中, → → 右边出现最多的就是C
  • 同理,第三步算法的目标柱子是B, → → 右边出现最多的就是B。

OK!到此,我们可以得知,在整个算法中,只有两个目标柱子——B和C存在。

算法实现

通过上面的一系列分析,我们得出了两个最为关键性的结论。根据这两个相关性结论,编写代码实现算法

C语言实现算法

#include <stdio.h>

//在参数x、y、z中,永远以中间那个参数为“目标柱子”
void hanoi(int n, char x, char y, char z)
{
    if (n == 1) {
        //递归的最后一种情况,1层汉诺塔:从A移动到B
        printf("第%d层圆盘移动方向 : %c -> %c\n", n, x, y);
    } else {
        //第一步,以C柱子为目标(规律二)
        hanoi(n - 1, x, z, y);

        //第二步,以B柱子为目标,直接输出(规律一)
        printf("第%d层圆盘移动方向 : %c -> %c\n", n, x, y);

        //第三步,以B柱子为目标(规律二)
        hanoi(n - 1, z, y, x);
    }
}

int main(void)
{
    hanoi(1, 'A', 'B', 'C');
    putchar('\n');
    hanoi(2, 'A', 'B', 'C');
    putchar('\n');
    hanoi(3, 'A', 'B', 'C');
    putchar('\n');
    hanoi(4, 'A', 'B', 'C');

    return 0;
}

/* 运行结果:
第1层圆盘移动 : A -> B

第1层圆盘移动 : A -> C
第2层圆盘移动 : A -> B
第1层圆盘移动 : C -> B


第1层圆盘移动 : A -> B
第2层圆盘移动 : A -> C
第1层圆盘移动 : B -> C
第3层圆盘移动 : A -> B
第1层圆盘移动 : C -> A
第2层圆盘移动 : C -> B
第1层圆盘移动 : A -> B


第1层圆盘移动 : A -> C
第2层圆盘移动 : A -> B
第1层圆盘移动 : C -> B
第3层圆盘移动 : A -> C
第1层圆盘移动 : B -> A
第2层圆盘移动 : B -> C
第1层圆盘移动 : A -> C
第4层圆盘移动 : A -> B
第1层圆盘移动 : C -> B
第2层圆盘移动 : C -> A
第1层圆盘移动 : B -> A
第3层圆盘移动 : C -> B
第1层圆盘移动 : A -> C
第2层圆盘移动 : A -> B
第1层圆盘移动 : C -> B
*/

如分析中那样,递归算法采用的终止条件是——1层汉诺塔情况,但实际上这个算法是缺乏健壮性不合理的,而且存在冗余。因为它没能考虑汉诺塔最特殊的情况——0层汉诺塔 。当程序运行hanoi(0)时,函数无法返回,造成异常错误。事实上,0层汉诺塔是存在且合理的,而且把0层汉诺塔考虑进去才符合我们对汉诺塔问题的本质分析——每一次都是从A移动到B ,而且我们可以发现上述代码中1层汉诺塔也并没有什么特殊之处,函数中两个printf()语句执行的操作是一模一样的。下面给出改进版本的代码

Python实现算法

def hanoi(n, x, y, z):
    if not n:
        pass   #0层汉诺塔不需要做任何移动
    else:
        hanoi(n-1, x, z, y)
        print("第%d层圆盘移动方向:%c -> %c" % (n, x, y))
        hanoi(n-1, z, y, x)

hanoi(0, 'A', 'B', 'C')
# 什么也不输出

hanoi(1, 'A', 'B', 'C')
第1层圆盘移动方向:A -> B

hanoi(2, 'A', 'B', 'C')
第1层圆盘移动方向:A -> C
第2层圆盘移动方向:A -> B
第1层圆盘移动方向:C -> B

hanoi(3, 'A', 'B', 'C')
第1层圆盘移动方向:A -> B
第2层圆盘移动方向:A -> C
第1层圆盘移动方向:B -> C
第3层圆盘移动方向:A -> B
第1层圆盘移动方向:C -> A
第2层圆盘移动方向:C -> B
第1层圆盘移动方向:A -> B

改进版本的Python代码,不但能正确计算出汉诺塔问题,而且算法还能够兼容最特殊的情况——0层汉诺塔问题。这才是该问题最优雅的算法。

问题答案

回到汉诺塔的问题上,64个圆盘的汉诺塔需要移动多少次才能完成从A柱子到B柱子。

通过上面发现的规律,以及算法的实现,我们可以得出该算法的递归公式

H(n)=H(n−1)+1+H(n−1) H ( n ) = H ( n − 1 ) + 1 + H ( n − 1 )

使用递推公式计算汉诺塔移动次数

H(0)=0 H ( 0 ) = 0

H(1)=H(0)+1+H(0)=0+1+0=1 H ( 1 ) = H ( 0 ) + 1 + H ( 0 ) = 0 + 1 + 0 = 1

H(2)=H(1)+1+H(1)=1+1+1=3 H ( 2 ) = H ( 1 ) + 1 + H ( 1 ) = 1 + 1 + 1 = 3

H(3)=H(2)+1+H(2)=3+1+3=7 H ( 3 ) = H ( 2 ) + 1 + H ( 2 ) = 3 + 1 + 3 = 7

H(4)=H(3)+1+H(3)=7+1+7=15 H ( 4 ) = H ( 3 ) + 1 + H ( 3 ) = 7 + 1 + 7 = 15

H(5)=H(4)+1+H(4)=15+1+15=31 H ( 5 ) = H ( 4 ) + 1 + H ( 4 ) = 15 + 1 + 15 = 31

H(6)=H(5)+1+H(5)=31+1+31=63 H ( 6 ) = H ( 5 ) + 1 + H ( 5 ) = 31 + 1 + 31 = 63

... . . .

观察函数与函数值的规律可得知

H(0)=0=20−1 H ( 0 ) = 0 = 2 0 − 1

H(1)=1=21−1 H ( 1 ) = 1 = 2 1 − 1

H(2)=3=22−1 H ( 2 ) = 3 = 2 2 − 1

H(3)=7=23−1 H ( 3 ) = 7 = 2 3 − 1

H(4)=15=24−1 H ( 4 ) = 15 = 2 4 − 1

H(5)=31=25−1 H ( 5 ) = 31 = 2 5 − 1

H(6)=63=26−1 H ( 6 ) = 63 = 2 6 − 1

... . . .

因此,通项表达式为

H(n)=2n−1 H ( n ) = 2 n − 1

当 n = 64 时,H(64) = 18446744073709551615。就算是每秒可以移动一次,也需要5845亿年多,而目前所知的宇宙的年龄也不过才137亿年,所以说就算传说当真,那么距离世界末日还早着呢。。。

总结

递归算法的关键就在于抓住递归中重复的步骤,然后每次递归都是在重复那一关键步骤。递归算法虽然内存开销比较大,但是代码可读性很好,而且体现出了一种数学的优雅美(反正我觉得很美!)。

数学中分形,具有递归美,下面放出福利图片,送给大家欣赏(图片来源:http://www.matrix67.com,侵权必删!)

科赫雪花

用python3递归法解决汉诺塔问题 汉诺塔问题: 从左到右 A  B  C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面. 如果有3个盘子, 大中小号, 越小的越在上面, 从上面给盘子按顺序编号 1(小),2(中),3(大), 后面的原理解析引用这里的编号. 小时候玩过这个游戏, 基本上玩到第7个,第8个就很没有耐心玩了,并且操作的动 阅读详情

相关推荐

用python递归的算法解决汉诺塔问题

关于递归的四条基准法则 基准情形: 必须由某些基准情形,它无需递归就能解出 不断推进: 对于那些需要递归的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进 设计法则: 假设所有的递归调用都能运行 合成效益法则: 在求解同一问题的同一实例时, 切勿在不同的递归调用中做重复的工作 _________________摘自《数据结构与算法分析(机械工业出版社Mark Allen ...

3547

汇编汉诺塔

.386 .model flat .stack 4096 include io.h ExitProcess proto near32 stdcall, ExitCode:dword cr equ 0dh lf equ 0ah .data string1 byte "请输入汉诺塔数:", cr, lf strNum byte 10 dup(?) resu...

weixin_33738578的博客 389

FreeRTOS-Plus-CLI在STM32F429上的高效移植与调试技巧

本文详细介绍了如何将FreeRTOS-Plus-CLI高效移植到STM32F429平台,并分享关键的调试技巧。内容涵盖使用HAL库进行底层驱动适配(特别是DMA+IDLE中断方案)、工程集成、自定义命令开发以及常见问题解决方案,旨在帮助开发者快速为嵌入式系统添加强大的命令行调试接口,提升开发与维护效率。

weixin_29224309的博客 333

C语言编程求解圆盘的汉诺塔,课内资源 - 基于80x86汇编的汉诺塔

一、软件背景介绍我们今天要陈述的应用叫做汉诺塔,大家可能小时候都接触过类似于鲁班锁,九连环的益智玩具,我们要说的汉诺塔其实也可以说是益智玩具的一种。 下面我们具体介绍一下汉诺塔。汉诺塔有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。求按下列规则将所有圆盘移至C杆,必须遵循以下原则:每次只能移动一个圆盘大盘不能叠在小盘上面所以在这个前提下,我们做的程序就可以更快...

weixin_30184337的博客 697

探索LLM世界:新手小白的学习路线图

通过系统的学习和实践,新手小白也能逐步掌握LLM的核心技术。掌握LLM不仅能提升个人技术水平,还能为职业发展带来广阔的前景。未来,随着技术的不断进步,LLM将在更多领域发挥重要作用,成为推动科技进步的重要力量。学习LLM是一条充满挑战但也充满机遇的道路。只要你坚持不懈、不断学习和实践,就一定能够在LLM领域取得突破。希望本文提供的学习路线图能为你指明方向,助你早日掌握LLM,开启AI学习的新篇章!

m0_62110645的博客 2359

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

ACGkaka的博客 2万+

习题3.10 汉诺塔的非递归实现 (25分)

习题3.10 汉诺塔的非递归实现 (25分) 借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。 输入格式: 输入为一个正整数N,即起始柱上的盘数。 输出格式: 每个操作(移动)占一行,按柱1 -> 柱2的格式输出。 输入样例: 3 输出样例: a -> c a -> b c -> b a -> c b -> a b -&

Tsoor_h的博客 378

光谱分布、光谱辐射通量密度与不同时间段分布光谱(图示)

1、光谱分布图 2 太阳辐射能量图 3、不同时间段的太阳分布光谱图 4、不同波长的光的能量分布主要区域 5、不同波段的使用场景

maopig的专栏 2万+

利用递归方法解决汉诺塔问题

利用递归方法解决汉诺塔(Hanoi)问题 一、汉诺塔问题 汉诺塔问题是一个经典的古典数学问题,它由三根柱子和若干个圆盘组成。 游戏规则如下: 1.每次只能移动一个圆盘 2.任何时候必须保证大圆盘在下,小圆盘在上 3.目的是在1,2条件下将一根柱子上所有圆盘转移到另一根柱子上。 二、递归算法 想要利用递归解决这个问题,首先我们要确定几个概念: 1、初始柱A 也就是游戏开始时所有圆盘所在的柱子。 ...

m0_46451722的博客 2756

嘉立创EDA实战:从点亮第一盏灯到完成首块PCB

本文详细介绍了使用嘉立创EDA从点亮第一盏LED灯到完成首块PCB的全过程。通过实战案例分享,包括原理图绘制、PCB设计、DRC检查、覆铜操作等关键步骤,帮助电子设计爱好者快速掌握嘉立创EDA的使用技巧,并避免常见的设计错误。

weixin_30314793的博客 372

雪莉果的Axure原型工厂vol.006 中继器应用(二)——多选穿梭框

如果你用axure有一段时间了,那么你很快就能琢磨出一个大体设计流程,比如加一个中间过度的元件,来储存需要穿梭的内容;但是如果你再想一想,就会发现,这样做,似乎只能解决单选,那么多选需要怎么操作呢? 这时候,中继器就会告诉你,我还能做的更多。

weixin_43829792的博客 976

利用Python解决汉诺塔问题(递归)

熟悉一下汉诺塔 python解决汉诺塔问题 问题: 有三个立柱A、B、C。A柱上穿有大小不等的圆盘N个,较大的圆盘在下,较小的圆盘在上。要求把A柱上的圆盘全部移到C柱上,保持大盘在下、小盘在上的规律(可借助B柱)。每次移动只能把一个柱子最上面的圆盘移到另一个柱子的最上面。请输出移动过程。 问题分析(看图): 以上是来自https://blog.youkuaiyun.com/qq_41282102/article/details/85061198的图片。 从以上n=2时的动图中可以发现,B相当于作为放置的媒介,而最.

weixin_44587361的博客 1万+

2024年数字IC秋招-速腾聚创-数字芯片验证工程师-笔试题

笔试题型:单选 + 问答题笔试平台:牛客(手机+电脑监控)笔试时间:1hA. len取10的概率是1/2;B. len取10的概率是1/3;C. len取10的概率是1/4;D. len取10的概率是1;

qq_42135020的博客 1396

用递归方法解决汉诺塔问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中.

m0_56782929的博客 3490

VEML7700环境光传感器原理图设计,已量产(光线传感器)

最近做便携显示设备的自动亮度调节模块,最终敲定了 VEML7700 这款数字光传感器 —— 一是它 0~120klx 的宽量程刚好覆盖 “暗室→户外强光” 的全场景,二是 Filtron™技术让它的光谱响应和人眼高度贴合,测出来的 “亮度” 更符合实际视觉感受,加上 O-Trim™技术把输出公差压到 10% 以内,省了不少后期校准的功夫。搭好电路后串口直接读 lx 数值,稳定性和精度都够,这篇聊聊这个模块的硬件设计细节。

不脱发的程序猿 598

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【递归详解】C语言解决汉诺塔问题

C语言图解汉诺塔问题

m0_64107517的博客 2745

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

用函数递归的方法解决汉诺塔问题

函数递归算法的运用有一个经典例题,那就是汉诺塔问题,接下来就让我们一起来看看如何用函数递归来解决汉诺塔问题叭! 汉诺塔问题的起源: 汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。面对庞大的数字(移动圆片的次数)18446744073709551615,

2021dragon的博客 8955

Camera2Demo

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python|如何用递归解决汉诺塔问题?

欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。问题描述n个大小不同的圆盘按照从小到大的顺序放在A柱子...

算法与编程之美 1689

用递归解决汉诺塔问题

4.目标规则:需要将 A 柱(起始柱)上的所有圆盘按照相同的顺序移动到另一根柱子C柱(目标柱)上,B 柱(中转柱)可作为中间过渡的辅助柱子。我们发现,在解决大问题的时候我们都要先需要解决一些相同类型的小问题,而解决大问题和解决小问题的方法是一样的,这就代表我们可以用递归来解决问题。答:把上面的3个盘子移动到B,把最下面的第4个移动到C,然后把上面的3个移动到C。答:把最上面的1个移动到B,把第2个移动到C,然后把最上面的1个移动到C。答:把上面的2个盘子移动到C,把第3个移动到B,然后把上面2个移动到B。

cyh0914的博客 779

递归解决汉诺塔问题的详细步骤

在实际应用中,我们可以根据问题的具体情况选择合适的算法和实现方式,以达到最优的解决方案。同时,我们还需要不断地进行算法的优化和改进,以提高算法的性能和适用性。汉诺塔问题的目标是找到一种最优的解决方案,使得移动盘子的次数最少。函数的主要任务是找到最优的解决方案,使得盘子能够从起始柱子移动到目标柱子,同时尽可能减少移动盘子的次数。通过测试不同的输入数据,我们可以验证算法的正确性,同时可以发现算法中的优化点,进一步提高算法的性能。(3)根据剩余的盘子数量和目标柱子的数量,选择合适的柱子作为新的起始柱子;

qq_35974860的博客 99

通过函数的递归来解决汉诺塔问题

递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归策略:只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小。

m0_74336101的博客 485
下一篇: 求最大公约数算法
reedzhan
博客等级 码龄10年 7粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值