(1)# 概述java
遞歸:即一個函數調用了自身,即實現了遞歸 凡是循環能作到的事,遞歸通常都能作到!python
(2)# 寫遞歸的過程算法
一、寫出臨界條件
二、找出這一次和上一次關係
三、假設當前函數已經能用,調用自身計算上一次的結果,再求出本次的結果數據結構
(3)案例分析:求1+2+3+…+n的數和?app
輸出結果以下:函數
(一)、深度優先搜索學習
說明:深度優先搜索藉助棧結構來進行模擬
深度遍歷示意圖:spa
說明:
先把A壓棧進去,在A出棧的同時把B C壓棧進去,此時讓B出棧的同時把DE壓棧(C留着先不處理) 同理,在D出棧的時候,H I壓棧,最後再從上往下
取出棧內還未出棧的元素,即達到深度優先遍歷。
案例實踐:利用棧來深度搜索打印出目錄結構.net
程序代碼:code
結果:
該過程示意圖解釋:(s-05-1部分)
(二)、廣度優先搜索
原理分析:
說明:
隊列是 先進先出的模型。A先進隊,在A出隊的時候,C B入隊,按圖示,C出隊,FG 入隊,B出隊,DE入隊,
F出隊,JK入隊,G出隊,無入隊,D出隊,H I入隊,最後E J K H I出隊,均無入隊了,即每一層一層處理、
故:先進先出的隊列結構實現了廣度優先遍歷。 先進後出的棧結構實現的是深度優先遍歷。
代碼實現:
其實深度優先和廣度優先在代碼書寫上是差異不大的,基本相同,只是一個是使用棧結構(用列表進行模擬)
另外一個(廣度優先遍歷)是使用了隊列的數據結構來達到先進先出的目的。
廣度優先運行輸出結構:
先圖解:按照每一層從左到右遍歷便可實現。
總結
以上所述是小編給你們介紹的python 遞歸深度優先搜索與廣度優先搜索算法模擬實現 ,但願對你們有所幫助
原文連接:
https://www.jb51.net/article/149278.htm
識別圖中二維碼,領取python全套視頻資料