先copy一下百度百科的解说。程序调用自身的编程技巧称为递归( recursion)。
例如,要计算1-9的9位数字的乘积,直观的算法是1*2*3*4*5*6*7*8*9,如果
要计算1-10000的乘积,直观的算法就难于实现出,而递归就可以很简单的实现。
实例1
# coding: utf-8
def recurision(n): # recurision 就是递归
if n == 1:
return n # 在函数里面输出运算值的地方,如果用print, 用print type(recurision(10)), 显示
else: 其是NoneType,而显然,只有数才能和数相乘。所以我们用return返回函数的值。
return n * recurision(n - 1)
recurision(10)
好吧, 是不是没看懂啊。一开始我也摸不着头脑。 不过既然是数学问题,列个式子
你就知道了。
recurision(n) = n * resurision(n - 1)
= n * (n - 1) * recurison(n - 2)
直到 n = 1, 也就是if成立的时候, 所以我们用if...else语句
so easy!
----------------------------------------------------------------------------------
实例2
我们要删除脚本文件(‘.py‘程序)所在的文件夹下面的所有文本文件(以‘.txt‘ 为后缀名)
# coding: utf-8
import os
import sys
# 脚本文件所在的目录/路径,比如‘c:\python27\1.py‘ 前面 的‘c:\python27‘
currdir = sys.path[0]
def RemoveFile(dir, postfix):
# 判断是否为文件夹,是为True, 否为False。 同理 os.path.isfile 判断是否为文件
if os.path.isdir(dir):
for file in os.listdir(dir): # os.listdir列出dir目录下所有的子文件和子文件夹。
RemoveFile(dir + ‘\\‘ + file, postfix)
elif os.path.splitext(dir)[1] == postfix: # os.path.splitext()将文件名的前缀与后缀分开。比如1.txt的1和.txt
os.remove(dir) # os.remove()删除该文件
RemoveFile(currdir, ‘.txt‘)
Ok, 让我们来消化一下。假设我们的这个脚本名是1.py, 放在‘c:\python27‘下, 而这文件夹里面还有1.txt和2.txt之类
要删除的文件。
执行RemoveFile(currdir, ‘.txt‘)之后肯定是if语句先成立,因为currdir首先就是py文件所在的目录了(目录除了路径的意
思,就是指文件夹) 。而像RemoveFile(‘c:\\python27‘ + ‘\\‘ + 1.py, ‘.txt‘)一看就后缀名不一样。踢掉。 所以, 最后, 只有txt文件是符合elif的情况的。顺利删除。