• 函数六---递归函数


    在函数内部,可以调用其他函数。如果一个函数在内部调用它自身,那么这个函数就是递归函数。

    如阶乘  n! = 1 x 2 x 3 x ... x n,用函数func(n)表示,可以看出:

    func(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = func(n-1) x n

    所以,func(n)可以表示为n x func(n-1),只有n=1时需要特殊处理。

    于是,func(n)用递归的方式写出来就是:

    def func(n):
        if n == 1:
            return 1
        return func(n - 1) * n
    print(func(5))  # 120
    print(func(3))  # 6

    递归函数的优点:会让代码简单,逻辑清晰。

    递归函数的缺点:占内存,过深的调用会导致栈溢出

    使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

    最大递归深度默认是997/998
    # import sys
    # print(sys.setrecursionlimit(100000))
    #可以通过上面两句去修改默认值,至于实际可以达到的深度就取决于计算机的性能了
    import sys
    sys.setrecursionlimit(1000000)
    n = 0
    def story():
        global n
        n += 1
        print(n)
        story()
    
    story()
    # 如果递归次数太多,就不适合使用递归来解决问题
    View Code
    n = 0
    def story():
        global n
        n += 1
        print(n)
        story()
    story()
    View Code
  • 相关阅读:
    ubuntu mysql 的安装与简单操作
    JavaScript中的返回函数的函数
    JavaScript中的作用域
    JavaScript中的面向对象【一】
    JavaScript中的函数是数据
    JavaScript中的面向对象【二】
    JavaScript中的函数重写自己
    JavaScript中的匿名函数、回调函数、自调用函数
    JavaScript中的闭包
    mysql添加索引
  • 原文地址:https://www.cnblogs.com/huangjm263/p/8244007.html
Copyright © 2020-2023  润新知