【教程】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

第一次接觸遞歸三原則的人可能會有些不是很明白的感覺,不知道每一步具體是要怎麼做。
沒關係,建議直接去看看我後面的三個實戰,相信看完三個實戰後在回過頭來看遞歸三原則,自然而然就理解了。

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