Python-7递归函数

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.递归的详解:很多人都不知道递归到底怎么递归,首先,递归的核心是有递有归,需要分开看,每一次的递归都要有回才行。(每一步的走向:以第一个例子为主)

 

posted @ 2023-05-30 16:30  许个未来—  阅读(10)  评论(0编辑  收藏  举报