递归:函数对自身定义的引用。
每次函数调用时,针对这个调用的新命名空间会被创建,意味着当函数调用“自身”时,实际上运行的是两个不同的函数(或者说同一个函数具有两个不同的命名空间)。
阶乘
计算数 n 的阶乘(n * (n-1) * (n-2) .. * 1
):
# for 循环实现
def fac(n):
result = n
for i in range(1, n):
result *= i
return result
# 递归实现
def fac(n):
def rec_fac(n):
if n == 1:
return n
else:
return n * rec_fac(n - 1)
二分法
def search(sequence, number, lower=0, upper=None):
if upper is None:
upper = len(sequence) - 1
if lower == upper:
assert number == sequence[upper]
return upper
else:
middle = (lower + upper)//2
if number > sequence[middle]:
return search(sequence, number, middle+1, upper)
else:
return search(sequence, number, lower, middle)
查找目录下的所有文件
def Test(rootDir):
for lists in os.listdir(rootDir):
path = os.path.join(rootDir, lists)
print path
if os.path.isdir(path):
Test(path)