美文网首页读书
小谈递归---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

    预备知识: 1.写过递归函数 2.懂得基本的语法 3.懂得基本的复杂度分析 ...

  • 小谈递归---recursion(2)

    这里用上dict(),保存了一系列的初始值,其实就大大减少了运算量和内存,妙啊... reference:《像计算...

  • 递归(recursion)

    基线条件(base case)&递归条件(recursive case) 递归条件基线条件 堆栈 调用栈 递归调用栈

  • 递归(recursion)

    如何设计递归算法 确定递归公式 确定边界条件 1. Fibonacci 2. 快速排序(Quick Sort) 3...

  • 递归(Recursion)

    递归(Recursion) [toc] 函数(方法)直接或间接调用自身。是一种常用的编程技巧 1 函数的调用过程 ...

  • recursion 递归

    刷leetcode发现很多题目涉及递归 Introduction to Java Programming, Com...

  • Recursion递归

    递归定义 编程的角度来看,程序调用自身的编程技巧称为递归(recursion)。本质上将原来的问题转化成更小的同一...

  • 2018-06-12

    算法(algorithm) 递归(recursion) 嵌套(nested) ...

  • Rust语言编程实例100题-028

    Rust语言编程实例100题-028 题目:递归练习。程序调用自身的编程技巧称为递归( recursion)。递归...

  • Rust语言编程实例100题-026

    Rust语言编程实例100题-026 题目:递归练习。程序调用自身的编程技巧称为递归( recursion)。递归...

网友评论

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

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