1. 程式人生 > >Python-函數的遞歸調用

Python-函數的遞歸調用

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-函數的遞歸調用