函数之递归

import sys       调包
print(sys.getrecursionlimit()) #查询递归层数
sys.setrecursionlimit(2000) #定义递归层次
def func(x):
print(x)
func(x+1)
func(1)

# 递归就是在函数内部无限调用自己 但是python为了不让内存撑爆 默认递归层次为1000次




2:

def func(x):  #递归可以用来进行斐波那契 二分查找,汉诺塔  等等
x //= 2
print(x)
if x==0:
return
func(x)
print(x) #递归在每一次执行完时只要不遇见return 在‘return’之前的数据还会在内存里 在内部的调用结束后会一层层的退出
func(10)
1;递归进行时之前必须给它一个停止的条件,否则会撑爆系统
2:递归次数越多,相对层次会越减少
3:递归效率不高,递归层次越深会导致栈的溢出





#递归阶乘:
def func(n):
if n==1:
return 1
return n * func(n-1)
print(func(4))


#这里传入n=4 然后条件不满足,开始返回 但是在返回中遇见递归调用,依次把n的每次的递归的层次的n分别赋予3,2,1,当n==1把n返回给了‘func()’这是开始向外返回倒数第二次n==2‘此时func()==1‘, 2*1,3*2,4*6 这里分别把每次向外返回的相乘的值给了’func()‘。
 尾递归:
def func(n):
  print(n)
  return func(n+1)
func()
#在’c‘语言里面尾递归会把每次的运行结果摈弃 而python却依然会存入’栈‘中 但是’js‘会类似于’c‘
原文地址:https://www.cnblogs.com/yuexijun/p/9998209.html