# 递归常见错误
# 超过最大递归限制
# solve 递归必须要有结束条件
# 返回值
# slove 不要只看到return就认为返回了,要看返回操作是在递归的第几层的时候发生的,然后返回给了谁
# 如果不是返回给最外层函数,调用者就接收不到
# 需要再分析,看如何把结果返回回来
# 循环 ,几乎所有的递归可以用循环解决,快速排序需要用递归实习
# 斐波那契数列,第N个斐波那契数是?
两次递归
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n-1)+fib(n-2) # 调用了两层,会使效率降低,尽量不用两层
print(fib(10))
一次递归
def fib(n, lis=[0]):
lis[0] += 1
if n == 1 or n == 2:
lis[0] -= 1
return 1, 1
else:
a, b = fib(n-1) # 位置不能放在lis[0] -=1下面
lis[0] -= 1
if lis[0] == 0:
return a+b
return b, a+b
print(fib(50))
阶乘
def fac(n):
if n == 1:
return 1
return n*fac(n-1)
print(fac(10))
# 常用模块
# 计算器
# re模块
# 正则表达式 字符串匹配
# re模块操作正则表达式