美文网首页
数据结构之递归一

数据结构之递归一

作者: 胡西恒 | 来源:发表于2017-11-12 08:39 被阅读35次

前言

上一篇写了关于数学归纳法的一些概念,那么这一篇就该带大家去体会一下递归了。

正文

这一篇主要通过一个小游戏带领大家走入递归的世界,这个游戏叫做汉诺塔 ,先说下游戏规则,如下图所示,有三根柱子,我们需要把套在 A 柱子上的圆环全部移动到 B 上,一次只能移动一个圆环,当然圆环的顺序也得一样。那么 C 柱则起到了中转的作用。

汉诺塔

下面是最终需要达到的结果

最终结果

有点人可能会说,一开始就让我们接触这么多的圆环,怎么也会搞混啊,那么我们就先从简单一点的开始吧。先从只有三个的圆环入手。

三个圆环

这里我们需要把 A 上的三个圆环借助 C 全部移动到 B 柱上。首先开始之前我们应该思考下,要想把三个全部移动到 B 柱上,则先需要把上面两个拿到 C 柱,然后把最大的那个拿到 B 柱,最后把上面的两个放到最大的上面。当我们把两个环拿到 C 的时候,势必需要借助 B 柱作为一个临时中转,这样我们就完成了移动的过程。写成规范一点的步骤就是:

步骤一: 把两个环从 A 柱经过 B 柱进行中转移动到 C 柱。

步骤二: 把第三个环拿到 B 柱。

步骤三: 把两个环从 C 柱经过 A 柱进行中转移动到 B 柱。

经过这三个步骤我们就实现了三个圆环的移动。这时候我们就可以结合上一篇讲过的数学归纳法进行递推到如果有 n 个圆环怎么移动的问题了。

首先,如果 n = 0 ,不做任何移动。

其次,如果 n > 0 ,做三个步骤:

步骤一: 把 n - 1 个环从 A 柱经过 B 柱进行中转移动到 C 柱。

步骤二: 把第 n 个环拿到 B 柱。

步骤三: 把 n - 1 个环从 C 柱经过 A 柱进行中转移动到 B 柱。

至于如何把 n - 1 个圆环移动,上面通过两个环的例子已经给大家进行了简单的说明,这就是递归和数学归纳法的不同之处了,数学归纳法是先知道简单的怎么做去推导出一般的结论,而递归则是知道一般的要求,通过把一般的问题化成简单的问题来解决。如果大家光听理论有些混乱的话,可以去玩玩汉诺塔的小游戏体会下

当然最后我们得从程序员的角度去实现一下汉诺塔的解法


#include<stdio.h>
#include<stdlib.h>

void hanoi(int n,char x,char y,char z);

int main()
{
    hanoi(6,'A','B','C');
    getchar();
    return 0;
}

void hanoi(int n,char x,char y,char z)
{
    if(n == 0)
    {
       //不做任何动作 
    }
    else
    {
        
        hanoi(n-1,x,z,y);
        printf("%c -> %c\t",x,y);
        hanoi(n-1,z,y,x);   
    }
    
}


运行结果

我们可以通过游戏对程序的结果进行验证,在下一篇中会对这个游戏有个简短的总结。

这一篇通过一个小游戏带大家粗略了解了递归的概念,后面还将有两个例子和一个总结对递归进行了解。

相关文章

  • 数据结构之递归

    数据结构之递归 1.递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解...

  • 数据结构之递归一

    前言 上一篇写了关于数学归纳法的一些概念,那么这一篇就该带大家去体会一下递归了。 正文 这一篇主要通过一个小游戏带...

  • python数据结构教程 Day6

    python数据结构教程 Day6 本节重点 递归定义 递归调用的实现 简单递归的应用 一、递归 在python基...

  • 数据结构之递归

    递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数...

  • 反转链表(java实现)

    链表反转 节点数据结构如下: 链表反转的两种方式:递归和非递归 递归方式如下: 非递归方式如下:

  • 递归的Java实现

    算法 数据结构——递归的运行机制:递归的微观解读 递归是一种应用非常广泛的算法(或者编程技巧)。递归求解问题的分解...

  • 09数据结构之递归

    1.什么是递归? 1.递归是一种非常高效、简洁的编码技巧,一种应用非常广泛的算法,比如DFS深度优先搜索、前中后序...

  • 二叉树的四种遍历方法

    二叉树的数据结构 1、前序遍历(递归) 2、中序遍历(递归) 3、后序遍历(递归) 4、层次遍历(队列)

  • 【数据结构】递归和分治思想之递归

    斐波那契数列的实现 斐波那契问题介绍 如果一对兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。...

  • 数据结构之二叉树

    数据结构之二叉树 递归构造二叉树 二叉树节点: 递归构造: 图示: 递归遍历 递归实现先序遍历 图示: 递归实现中...

网友评论

      本文标题:数据结构之递归一

      本文链接:https://www.haomeiwen.com/subject/xllnmxtx.html