递归
基本概念
在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知。
满足条件
1、自己调用自己
2、必须有一个明确的结束条件
优缺点
优点:
- 逻辑简单,定义简单
- 代码整洁
- 将复杂的任务分解为简单的子问题
- 比嵌套迭代更容易
缺点:
- 容易导致栈溢出,内存资源紧张甚至内存泄露
- 调试困难
递归案例
- 计算n的阶乘
def factorial(n):
if n==1:
return 1
fac=n*factorial(n-1)
return fac
- 结果
n=5
print('{}的阶乘是{}'.format(n,factorial(n)))
5的阶乘是120
- 计算自然数1至n的和
def Summation(n):
if n==1:
return 1
else:
sum=n+Summation(n-1)
return sum
- 结果
n=5
print('1到{}的和是{}'.format(n,Summation(n)))
1到5的和是15
3.求斐波那契数列第n位的数
(指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)。这个数列从第3项开始,每一项都等于前两项之和。)
def Fibonacci(n):
if n==0 or n==1:
return n
else:
result=Fibonacci(n-2)+Fibonacci(n-1)
return result
- 结果
n=9
print('斐波那契数列第{}项是{}'.format(n,Fibonacci(n)))
斐波那契数列第9项是34
4.模拟树形结构遍历文件夹中的所有文件
#输入path是一个路径,目的:查看里面的所有文件(如果有文件夹要打开文件夹接着查看,直到找到所有文件)
import os
def findFile(path):
path_file=os.listdir(path)#获取路径path里的所有文件和文件夹
for fileitem in path_file:#遍历path里的所有文件或者文件夹
full_path=os.path.join(path,fileitem)#文件或文件夹的完整路径
if os.path.isdir(full_path):#判断是不是文件夹
findFile(full_path)#是文件夹 递归
else:
print(fileitem)#否则输出文件名
else:
return
- 结果
print(findFile('F:\\社团注册材料'))
2017---2018学年第一学期社团注册要求.doc
上学年财务总结报告.doc
主要活动介绍.doc
女子协会章程.doc
电信女子协会学期总结.doc
电信女子协会学期计划.doc
社团活动统计表.doc
社团登记表.doc
社团负责人审批表.doc
第一学期社团注册要求.doc
获奖情况.doc
财务审批表.doc
主要活动介绍.doc
女子协会章程.doc
礼仪部11月份工作计划.doc
礼仪部十月份工作总结.doc
社团注册材料.zip
社团活动统计表.doc
社团登记表.doc
社团负责人审批表.doc
获奖情况.doc
财务审批表.doc
这是路径下的所有文件,其中包括两个文件夹