python 函数调用自身_Python-函数的递归调用

递归调用顾名思义即在函数内部调用函数(自己调用自己),通常用它来计算阶乘,累加等

注意:

- 必须有最后的默认结果

if n ==0,(不能一直调用自己,如果没有可能会造成死循环)

- 递归参数必须向默认的结果收敛

func(n-1)

例子1:计算5的阶乘

copycode.gif

#!/usr/bin/env python

def func(n):

if n == 0:

return 1

else:

return n * func(n-1)

print func(5)

copycode.gif

例子2:计算1到100的和

copycode.gif

#!/usr/bin/env python

def func(n):

sum = 0

if n == 0:

return 0

else:

return n + func(n-1)

print func(100)

copycode.gif

例子3:用递归的方法打印目录下的所有文件名

copycode.gif

#!/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])

copycode.gif

改进版:

copycode.gif

#!/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])

copycode.gif

用到的模块

os.path.isdir()

- 判断后面的文件是否是目录,是的话返回True(不能判断目录是否存在,不存在也会返回false)

os.path.isfile()

- 判断后面的文件是否是文件,是的话返回True(不能判断文件是否存在,不存在也会返回false)

os.path.join()

- 连接括号中的路径(文件)

os.path.join('/etc/','passwd','abc') ----> /etc/passwd/abc

注意

Python3默认递归的深度不能超过1000层