递归
递归是基于函数,函数构成的循环,函数包含了对自身的调用,称为递归。
- 递归类似于循环,循环解决的问题一般都是线性的,递归不单可以解决线性问题也可以解决非线性问题。
- 递归优于循环,递归占用的内存比普通循环更多,因此递归的效率比普通循环要更高一些。
注意事项:递归在使用时要首先注意的是递归结束的标志,如果没有结束标志,系统默认自带的递归上限为1000,超出会报错。
简单实例:
mylist = [1,2,3,4,5]
def mysum(opj): #递归函数
if not opj:
return 0
else:
return opj[0] + mysum(opj[1:])
res = mysum(mylist)
#实际运行过程
#retu obj[0] + mysum(obj[1:])
# 1 + mysum([2,3,4,5])
# 2 + mysum([3,4,5])
# 3 + mysum([4,5])
# 4 + mysum([5])
# 5 + mysum(obj[])
# 0
print(res)
递归解决非线性问题
实例:
mylist = [1,2,[3,4,[5],6],7]
_sum = 0
def mysum(opj):
global _sum#声明了_sum为全局的
for var in opj:
if not isinstance(var,list):# isinstance(变量,类型):判断一个变量是否属于某种类型
_sum += var
else:
mysum(var)
return
#递归的终止:for循环终止
mysum(mylist)
print(_sum)