python函数递归调用

函数递归调用

函数自己调用自己。
递归必须有最后的默认结果,如下例中的if n == 0。
递归参数必须向默认结果收敛,如下例中的factorial(n-1)。

递归调用实例

计算阶乘

输入数字,得到该数字的阶乘

循环方式

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/python


def factorial(n):
sum = 1
for i in xrange(1,n+1):
sum *= i
return sum

x = int(raw_input("Please input a number:"))
print factorial(x)

输出结果

1
2
Please input a number:5
120

递归方式

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/python

def factorial(n):
if n == 0:
return 1
else:
return n*factorial(n-1)

x = int(raw_input("Please input a number:"))
print factorial(x)

输出结果

1
2
Please input a number:5
120

递归列出目录中的文件

函数讲解

  • os .listdir() 列出当前目录下的内容。

    1
    2
    In [5]: os.listdir('/root/aming')
    Out[5]: ['advance', 'basic', 'tmp.txt']
  • os.path.isdir() 判断是否为目录,是,返回True;不是或不存在,返回False。

    1
    2
    3
    4
    5
    In [6]: os.path.isdir('/root/aming')
    Out[6]: True

    In [7]: os.path.isdir('/root/aming/tmp.txt')
    Out[7]: False
  • os.path.isfile() 判断是否为文件,是,返回True;不是或不存在,返回False。

    1
    2
    3
    4
    5
    6
    7
    8
    In [8]: os.path.isfile('/root/aming')
    Out[8]: False

    In [9]: os.path.isfile('/root/aming/222')
    Out[9]: False

    In [10]: os.path.isfile('/root/aming/tmp.txt')
    Out[10]: True
  • os.path.join() 将字符连接为目录,不判断该路径是否存在。

    1
    2
    3
    4
    5
    6
    7
    8
    In [11]: os.path.join('root','aming','tmp.txt')
    Out[11]: 'root/aming/tmp.txt'

    In [12]: os.path.join('/root','aming','tmp.txt')
    Out[12]: '/root/aming/tmp.txt'

    In [13]: os.path.join('/root','aming','123')
    Out[13]: '/root/aming/123'

递归输出

列出目录下所有文件,包括子目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python

import os
import sys

def printFiles(path):
lsdir = os.listdir(path)
dirs = [i for i in lsdir if os.path.isdir(os.path.join(path,i))]
files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))]
if files:
for f in files:
print os.path.join(path,f)
if dirs:
for d in dirs:
printFiles(os.path.join(path,d))

printFiles(sys.argv[1])

输出结果

1
2
3
4
5
6
/root/aming/tmp.txt
/root/aming/advance/1_5_1.py
/root/aming/advance/1_4_4.py
/root/aming/advance/1_1_3.py
......................
/root/aming/basic/2_3_2.py

注意:当上述文件中if files:和if dirs:判断调换位置,输出结果将会发生变化,可自行尝试。

Recommended Posts