【教程】python递归三部曲(基于turtle实现可视化)- 0 递归三原则

大家好,我是大爽歌
本教程为本人在b站投稿的视频教程对应的文字版(正在更新中)
视频较详细,文本较简洁,大家选择一个看就好
本文主要通过三个实例来帮助大家理解递归(其展示动画已上传B站):
谢尔宾斯基三角形(Sierpinski Triangle)
汉诺塔(Tower of Hanoi)
迷宫探索(Maze Exploring)
本文代码已上传到github:https://github.com/BigShuang/recursion-with-turtle
本文参考文献:
Problem Solving with Algorithms and Data Structures using Python
turtle官方文档:
中文:https://docs.python.org/zh-cn/3.6/library/turtle.html
英文:https://docs.python.org/3.6/library/turtle.html

递归三部曲:

〇、介绍递归及三原则

一、谢尔宾斯基三角形

二、汉诺塔

三、迷宫探索

〇、递归及递归三原则

首先,什么是递归?
第一次接触这个概念的新人,往往很迷惑,直接去查定义的话:

定义:递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。

也会有一种好像明白又好像不明白的感觉。
在这里插入图片描述
为了让大家能够更简单直接的理解递归,
我这里做一个粗暴的比喻(暴论):
递归即套娃。
在这里插入图片描述
给大家讲个趣味小故事(雾)
并不是什么从前有座山,山里有个庙,庙里有个老神仙在那讲故事。
而是上古年间,愚公移山时期。

愚公说: 虽我之死,有子存焉; 子又生孙,孙又生子; 子又有子,子又有孙;

这里面的子又生孙,孙又生子其实就是个递归,如下图所示
在这里插入图片描述
当然这个递归有点小问题,那就是会
子子孙孙无穷匮(我们可以认为这是个bug)
解决这个bug也很简单
引入一个智叟工具人打断复读就可以了
在这里插入图片描述

最后言归正传

如果通过上面的一番说(gui)明(che),你还是不太明白什么是递归的话
没关系,我们暂时不太需要完全弄懂递归是什么
只要先弄懂递归需要怎么去操作就好
当我们弄懂了递归应该如何操作时,自然就理解了递归。

递归三原则

1,要有个基础条件,来退出递归
2,递归过程要向1中的基础情况靠拢
3,要不断的调用自身

原文
All recursive algorithms must obey three important laws:
A recursive algorithm must have a base case.
A recursive algorithm must change its state and move toward the base case.
A recursive algorithm must call itself, recursively.
出处:https://runestone.academy/runestone/books/published/pythonds/Recursion/TheThreeLawsofRecursion.html

第一次接触递归三原则的人可能会有些不是很明白的感觉,不知道每一步具体是要怎么做。
没关系,建议直接去看看我后面的三个实战,相信看完三个实战后在回过头来看递归三原则,自然而然就理解了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章