zoukankan      html  css  js  c++  java
  • 57.递归函数

    递归函数

    <1>什么是递归函数

    通过前面的学习知道一个函数可以调用其他函数。

    如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。

    <2>递归函数的作用

    举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n

    解决办法1:

    看阶乘的规律
    1! = 1
    2! = 2 × 1 = 2 × 1!
    3! = 3 × 2 × 1 = 3 × 2!
    4! = 4 × 3 × 2 × 1 = 4 × 3!
    ...
    n! = n × (n-1)!

    解决办法2:

     原理

     例子1:

    # 需求: 5! = 5 * 4 * 3 * 2 * 1
    
    # 不考虑递归函数
    def my_func(num):
        # 定义一个变量 保存结果
        ret = 1
        for i in range(1, num + 1):
            ret *= i
        return ret
    print(my_func(100))

    例子2:

    # 需求: 5! = 5 * 4 * 3 * 2 * 1
    # # 1! = 1
    def func1(num):
        if num == 1:
            return num
    
    # 2! = 2 * 1!
    def func2(num):
        return num * func1(num -1)
    
    # 3! = 3 * 2!
    def func3(num):
        return num * func2(num - 1)
    
    # 4! = 4 * 3!
    def func4(num):
        return num * func3(num - 1)
    
    # 5!
    def func5(num):
        return num * func4(num - 1)

    优化:

    # 整合优化
    # 递归函数: 其函数内部调用了自己本身
    # python中的递归函数 是有递归次数 达到一定量后 会报错
    # 使用递归必须有一个停止递归调用的条件
    # 因为每次调用函数的时候 也需要消耗资源
    # 会把计算机的资源耗尽 可能会造成计算机死机
    # 函数存在于不同的空间 只是名字相同而已
    # 识别哪些是递归函数
    def func(num):
        if num == 1:
            return num
        return num * func(num - 1)
    print(func(5))
  • 相关阅读:
    Javascript异步编程的4种方法
    同步编程和异步编程
    关于js 异步回调的一些方法
    array的方法 没记住的
    阮一峰关于reduce 和transduce的博客
    CSS开发小技巧
    提升自己的一个网址
    asm.js 和 Emscripten 入门教程
    Koa -- 基于 Node.js 平台的下一代 web 开发框架
    C#中使用handsonetable的一个例子
  • 原文地址:https://www.cnblogs.com/kangwenju/p/12840248.html
Copyright © 2011-2022 走看看