Python-函數的遞歸調用
阿新 • • 發佈:2018-05-11
AR join 階乘 OS als clas def 括號 sum 遞歸調用顧名思義即在函數內部調用函數(自己調用自己),通常用它來計算階乘,累加等
註意:
- 必須有最後的默認結果
if n ==0,(不能一直調用自己,如果沒有可能會造成死循環)
- 遞歸參數必須向默認的結果收斂
func(n-1)
例子1:計算5的階乘
#!/usr/bin/env python def func(n): if n == 0: return 1 else: return n * func(n-1) print func(5)
例子2:計算1到100的和
#!/usr/bin/env python def func(n): sum = 0 if n == 0: return 0 else: return n + func(n-1) print func(100)
例子3:用遞歸的方法打印目錄下的所有文件名
#!/usr/bin/env python import os import sys def listdir(n): lsdir = os.listdir(n) for i in lsdir: if os.path.isfile(os.path.join(n,i)): print os.path.join(n,i) else: listdir(os.path.join(n,i)) listdir(sys.argv[1])改進版:
#!/usr/bin/env python import os import sys def print_file(path): lsdir = os.listdir(path) files = [ i for i in lsdir if os.path.isfile(os.path.join(path,i)) ] dicts = [ i for i in lsdir if os.path.isdir(os.path.join(path,i)) ] if files: for i in files: print os.path.join(path,i) if dicts: for f in dicts: print_file(os.path.join(path,f)) print_file(sys.argv[1])
用到的模塊
os.path.isdir() - 判斷後面的文件是否是目錄,是的話返回True(不能判斷目錄是否存在,不存在也會返回false) os.path.isfile() - 判斷後面的文件是否是文件,是的話返回True(不能判斷文件是否存在,不存在也會返回false) os.path.join() - 連接括號中的路徑(文件) os.path.join(‘/etc/‘,‘passwd‘,‘abc‘) ----> /etc/passwd/abc註意
Python3默認遞歸的深度不能超過1000層Python-函數的遞歸調用