递归
什么是递归?
在函数内部,可以调用其他函数。如果一个函数在内部调用自已本身,这个函数就叫做递归函数。
递归两个阶段
**回溯:**是指一层一层调下去,这时候的函数都没有结束。
**递推:**是调用到某一层,满足某种结束的条件之后,按照原来的路程一层一层返回
递归特性:
1.必须有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
4.递归在特定场景下还是挺有用的,以后学的一些算法就得用到递归,比如堆排、快排等,现在看还是有些复杂的,以后再讲。
l=[1,2,[3,[4,[6,[7,[8,[]]]]]]]
#要求把l里面的值都取出来
def fo(li):
for i in li:
if type(i) is list:
fo(i)
else:
print(i)
fo(l)