1.递归函数:自己调用自己,有来有回,一去一回
""" -*- coding: utf-8 -*- @FileName: recursion.py @Software: PyCharm @Time : 2023/5/10 16:04 @Author : Panda """ # 递归函数:recursion,自己调用自己,有来有回,一去一回 def recursion(n): print("未调用前 {}".format(n)) if n > 0: recursion(n - 1) print("======== {}".format(n)) recursion(5) # Output: 5 4 3 2 1 0 0 1 2 3 4 5
2.递归总结:每次调用函数时,都要单独再内存中开辟空间,叫做栈帧空间,用于运行函数中的代码
①递归实际上是不停开辟栈帧空间和释放的过程,开辟就是去的过程,释放就是回的过程
②递归条件:1.当最后一层栈帧空间执行结束的时候,触发归的过程
2.当遇到return返回值的时候,终止当前函数,触发归的过程
③递归不能无限开辟空间,可能造成内存溢出,溢屏死机的情况,所以一定要有跳出条件(如果递归太大,不使用)
④开辟的栈帧空间,数据是彼此独立不共享的。
""" -*- coding: utf-8 -*- @FileName: recursion.py @Software: PyCharm @Time : 2023/5/10 16:04 @Author : Panda """ def rec(): rec() rec() # Output: RecursionError: maximum recursion depth exceeded: # # [Previous line repeated 983 more times],最大默认不超过1000层,根据每个电脑的配置层数都不一样。 # 递归算阶乘 """一般方法""" n = 5 total = 1 for i in range(n, 0, -1): # range函数 左闭右开 total *= i print(total) # Output: 120 """递归""" def classes(n, values): if n <= 1: return values return classes(n-1, n * values) print(classes(5, 1)) # Output: 120 # 保护需要的参数值,将参数值隐藏起来,防止被篡改 def outer(n): def classes(n, values=1): if n <= 1: return values return classes(n-1, n * values) return classes(n) # 如果是return classes 则是闭包,此处是返回值,为了隐藏参数值 print(outer(6)) # Output: 720 # 递归计算斐波那契数列第几项为多少 def feibo(n): if n == 1 or n== 2: return 1 return feibo(n - 1) + feibo(n - 2) print(feibo(6))
3.递归的详解:很多人都不知道递归到底怎么递归,首先,递归的核心是有递有归,需要分开看,每一次的递归都要有回才行。(每一步的走向:以第一个例子为主)
标签:递归,递归函数,Python,recursion,print,rec,栈帧 From: https://www.cnblogs.com/future-panda/p/17388878.html