递归调用顾名思义即在函数内部调用函数(自己调用自己),通常用它来计算阶乘,累加等
注意:
- 必须有最后的默认结果
if n ==0,(不能一直调用自己,如果没有可能会造成死循环)
- 递归参数必须向默认的结果收敛
func(n-1)
- #!/usr/bin/env python
-
- def func(n):
- if n == 0:
- return 1
- else:
- return n * func(n-1)
-
- print func(5)
- #!/usr/bin/env python
-
- def func(n):
- sum = 0
- if n == 0:
- return 0
- else:
- return n + func(n-1)
-
- print func(100)
- #!/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层