Python-函數的遞歸調用


遞歸調用顧名思義即在函數內部調用函數(自己調用自己),通常用它來計算階乘,累加等
 
注意:
  - 必須有最后的默認結果
    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默認遞歸的深度不能超過100層
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM