递归函数定义
递归函数是指一个函数在内部调用了函数本身,这样的函数称之为递归函数。
代码示例
def outer():
print('A')
outer()
outer()
1.上面的代码虽然调用了函数本身,但是没有结束的条件,可以理解为死循环。
2.在 python 的最大递归次数是在 1000次 左右,也就是死循环的次数到 1000次 会报错终止循环。
3.当然我们可以改变最大次数,首先导入模块 sys ,使用 sys.getrecursionlimit() 可以看到最大的递
归次数,可以通过 sys.setrecursionlimit() 改变最大递归次数。
所以真正的函数递归应该满足俩个条件:
1.每次递归 复杂度必须降低
2.必须要有明确的结束条件
递归函数的应用
代码示例一
def index(x):
if x == 1:
return 10
return index(x-1) + 2
print(index(2))
1. 示例中,定义了一个函数 index(x)
2. 在函数中判断 x ,如果 x 为 1,返回 10。若不为 1 返回 index(x-1) + 2
3. 传入实参调用函数并打印
4. 上面的代码其实可以看做为:
index(3) = index(2) + 2
index(2) = index(1) + 2
index(1) = 10
5. 也就是说,index(3) = 14, index(3) 一直向 index(1) 递,直到有了确定的值 index(1),后
进行回溯
代码示例二(获取数字和)
def outer(x):
if x > 0:
return x + outer(x - 1)
else:
return x
print(outer(5))
1. 示例二中的结束条件是当 x 为 0 的时候返回 x 。不为 0 的时候返回 x + outer(x - 1)
2. 假设 x 为 3 ,返回的是 3 + outer(2)
3. 而outer(2) 返回的是 2 + outer(1),
4. outer(1) 返回的值是 1 + outer(0),
5. outer(0) 有确定的值为 0 ,依次往上回溯就可以得到数字的和。
代码示例三
def outer(x):
if x > 0:
return x * outer(x - 1)
else:
return 1
print(outer(5))
和示例二一样,示例三是累乘。
取出列表里所有的元素
def outer(x):
for i in x:
if type(i) is int:
print(i)
elif type(i) is list:
return outer(i)
outer([1, [2, [3, [4, [5, [6, [7, [8]]]]]]]])