小谈递归---recursion

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

                    2.懂得基本的语法

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

递归的三大要素

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

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

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

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

def factorial(n):

        if number == 0:

          return 1

        else:

          return n * factorial(n - 1)


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



图片发自App

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

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

图片来源于极客时间


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

def factorial(number):

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

      if number == 0:

          return 1

      else:

            recurse = factorial(number-1)

          # print(recurse)

          result = number * recurse

            return result


复杂度的变化

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

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

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

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

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

你可能感兴趣的:(小谈递归---recursion)