美文网首页读书
小谈递归---recursion

小谈递归---recursion

作者: DJ_f3ee | 来源:发表于2019-05-26 16:21 被阅读0次

    预备知识: 1.写过递归函数

                        2.懂得基本的语法

                      3.懂得基本的复杂度分析

    递归的三大要素

    第一要素:明确你这个函数想要干什么

    第二要素:寻找递归结束条件

    第三要素:找出函数的等价关系式

    第三要素可能比较难♂,可以看看离散数学,再多做做习题,会有些体会的

    def factorial(n):

            if number == 0:

              return 1

            else:

              return n * factorial(n - 1)

    这段代码执行,如下图所示

    小谈递归---recursion

    但是递归很容易形成资源的浪费,中间有些资源会放入栈中(以前的系列文章也有介绍,)如:

    这个斐波拉契数列的递归树

    图片来源于极客时间

    所以这个时候,我们得制造一些筛选条件,过滤不需要的值。

    def factorial(number):

      """加入临时变量,减少了递归次数,妙啊"""

          if number == 0:

              return 1

          else:

                recurse = factorial(number-1)

              # print(recurse)

              result = number * recurse

                return result

    复杂度的变化

    从这个复杂度的变化,也可以看出计算机资源的浪费,前面的复杂度的分析有一些介绍。

    所以,怎样添加制约条件,优化代码,这个问题值得深思。

    《像计算机科学家一样学Python》---递归

    《数据结构与算法Javascript描述》--- 高级算法

    《离散数学》---普通齐次差分方程

    相关文章

      网友评论

        本文标题:小谈递归---recursion

        本文链接:https://www.haomeiwen.com/subject/cxzxtctx.html