国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python 利用棧和隊(duì)列模擬遞歸的過程

2020-02-15 21:33:11
字體:
供稿:網(wǎng)友

一、遞歸

遞歸調(diào)用:一個(gè)函數(shù),調(diào)用的自身,稱為遞歸調(diào)用
遞歸函數(shù):一個(gè)可以調(diào)用自身的函數(shù)稱為遞歸函數(shù)

  凡是循環(huán)能干的事,遞歸都能干

方法:

1、寫出臨界條件
2、找這一次和上一次的關(guān)系
3、假設(shè)當(dāng)前函數(shù)已經(jīng)能用,調(diào)用自身計(jì)算上一次的結(jié)果再求出本次的結(jié)果

  下面我們通過兩段代碼簡單看一下遞歸和非遞歸的區(qū)別:

    輸入一個(gè)大于等于1的數(shù),求1到n的和!

# 普通函數(shù)方法def hanshu(n): sum = 0 # 循環(huán)遍歷每一個(gè)數(shù)字,將他們加到一個(gè)事先定義好的變量上,直到加完 for x in range(1, n+1):  sum += x return sum

  下面看一下通過遞歸的方法:

# 遞歸def digui(n): if n == 1:  return 1 # 如果n等于1證明已經(jīng)遞歸到最后,返回1,這就是上述的臨界條件 else:  return n + digui(n-1) # 當(dāng)沒有達(dá)到臨界條件時(shí),用n加上對n-1的遞歸,每次都把n加進(jìn)去,但是后面依然是使用當(dāng)下這個(gè)遞歸函數(shù),會再次調(diào)用計(jì)算n-1,直到遞歸結(jié)束,也就是將從n到1的數(shù)全部遞歸完

  在實(shí)際應(yīng)用中,遞歸是十分消耗內(nèi)存的,但是有些事情他很容易去做,很容易理解。下面,就通過一個(gè)案例介紹一下遞歸的用法。

二、遞歸遍歷目錄

  下面的內(nèi)容我就通過解釋代碼來講解了,如果哪里講的不清楚,歡迎大家下方評論提意見。

import os # 由于我們遍歷目錄,所以要找到那個(gè)目錄并操作,os模塊包含普遍的操作系統(tǒng)功能path = "" # 這是我們要遍歷的目錄的路徑,需要自己寫進(jìn)去# 既然是遞歸函數(shù),那么肯定要有個(gè)函數(shù),而且這個(gè)函數(shù)還將在函數(shù)內(nèi)部再次被調(diào)用def getAllDir(path, sp = ''): # 參數(shù)中傳入路徑和sp,這個(gè)我最后說一句你就明白了 # 得到當(dāng)前目錄下的所有文件 filesList = os.listdir(path) # os.listdir()是os模塊下的一個(gè)方法,相當(dāng)于Linux中的ls,查看所有文件 sp += " " # 這個(gè)也先放一下 # 處理每一個(gè)文件 for fileName in filesList: # 遍歷剛才找到的目錄下的所有文件  # 判斷是否是目錄(要用絕對路徑)  fileAbsPath = os.path.join(path,fileName) # join是os模塊下將兩個(gè)路徑拼接在一起的意思,第二個(gè)參數(shù)不能有斜杠。因?yàn)槲覀円袛嘁幌逻@個(gè)文件是一個(gè)普通文件還是一個(gè)目錄,所有要先把他的絕對路徑整理出來  if os.path.isdir(fileAbsPath): # isdir是判斷是否為目錄,是則返回True   print(sp + "目錄:", fileName) # 打印當(dāng)前這個(gè)文件,他是個(gè)目錄   getAllDir(fileAbsPath,sp = " ") # 這里就開始遞歸了,因?yàn)槲覀円业秸麄€(gè)目錄里的東西,所以當(dāng)這個(gè)文件還是個(gè)目錄的時(shí)候我們需要繼續(xù)向下找  else:   print(sp + "普通文件:", fileName) # 如果僅僅是個(gè)普通文件,那么他里面也就沒有其他文件了,就可以直接打印他了getAllDir(path) # 這里是調(diào)用函數(shù),讓遍歷開始# 最后我來說一下開始寫的那個(gè)sp,是space的意思,有人也許現(xiàn)在就明白了。那個(gè)其實(shí)就是讓我們方便觀察,因?yàn)槊看未蛴《际琼斝袑懙模覀兎植磺逅哪夸浗Y(jié)構(gòu),所以通過空格來調(diào)整。在函數(shù)內(nèi)部寫一個(gè)空格增加的表達(dá)式,可以使調(diào)用次數(shù)和空格數(shù)相關(guān)起來,遞歸的越深,證明目錄的級越低,那么空格越多            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊吾县| 晋宁县| 金湖县| 鲁甸县| 梧州市| 白山市| 屏东县| 准格尔旗| 城步| 海城市| 汶上县| 凤山市| 朝阳县| 蓬莱市| 公安县| 陆丰市| 伊吾县| 兴山县| 华安县| 兰溪市| 江孜县| 嫩江县| 同仁县| 扶绥县| 杭锦旗| 巴林右旗| 龙陵县| 航空| 易门县| 化德县| 青浦区| 金寨县| 剑川县| 西丰县| 威宁| 司法| 南宫市| 百色市| 万载县| 哈密市| 綦江县|