定义:递归就是不断分割整体成部分直到可以轻易解决分割出来的部分。

递归表达式三定律:

1:递归表达式必须有个最小单元     (最小单元既是停止递归调用以及能够直接运算的)

2:递归表达式在运算过程中必须向最小单元移动

3:递归表达式必须递归的调用自己

一:简单实例:

1:求数字数组所有元素的和

    def sum(seq=[]):

      if len(seq)==1:

        return seq[0]

      return seq[0]+sum(seq[1:])

    print('sum of the list:',sum([1,2,3,4,5,6,7,8,9]))

2:求阶乘

    def factorial(n):

      if n==1:

        return 1

return n*factorial(n-1)

    print('10!=',factorial(10))

  3:将十进制数转化为任意进制的string型字符串

    #回顾一下在讲堆的应用时也实现了类似功能

    convert_string = "0123456789ABCDEF"

    def to_str(n, base):

      global convert_string

      if n < base:

        return convert_string[n]

      else:

        return to_str(n//base, base) + convert_string[n % base]

    print(to_str(769, 2))

4:反转字符串

    def reverse(string):

      if len(string)==1:

        return str(string)

          return str(string[len(string)-1])+reverse(string[:len(string)-1])

    print(reverse('string'))

  5:汉诺塔问题(hanoi)

    问题:古代有一个梵塔,塔内有3个座A、B、C,开始时A座上面有64个盘子,盘子大小不等,大的在下,小的在上。现要求将这64个盘子从A全部移到C上,每次只允许移动一个盘子,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。移动过程中可以利用B座。

    注意:下面的实现过程不像上面单独的把最小单元提取出来进行处理与返回,我们知道,最小单元是只有一个盘,直接移动就是了,对应下面当height为1时,此时move_tower(height - 1, from_pole, middle_pole, to_pole)与move_tower(height - 1, middle_pole, to_pole, from_pole)调用时height-1的结果是0,故什么都不返回。

def move_tower(height, from_pole, to_pole, middle_pole):

if height >= 1:

move_tower(height - 1, from_pole, middle_pole, to_pole)

move_disk(from_pole, to_pole)

move_tower(height - 1, middle_pole, to_pole, from_pole)

      def move_disk(fp,tp):

print("moving disk from",fp,"to",tp)

      move_tower(3, "A", "B", "C")

二:复杂实例之走出迷宫

1:画图之turtle模块

    

    import turtle

    my_turtle = turtle.Turtle()

    my_win = turtle.Screen()

    def draw_spiral(my_turtle, line_len):

      if line_len > 0:

my_turtle.forward(line_len)

              my_turtle.right(90)     #只是转向90°

      draw_spiral(my_turtle, line_len - 5)

    draw_spiral(my_turtle, 100)

    my_win.exitonclick()                  #点击图像后退出

  

  2:迷宫分析

  基本原理:分别按上下左右的顺序来进行迭代行走,一个方向碰壁后进入下一个方向

         需叠加:要纪录走过的路,这样避免画圈式死循环

python 下的数据结构与算法---5:递归(Recursion)的更多相关文章

  1. python 下的数据结构与算法---1:让一切从无关开始

    这段时间把<Data Structure and Algorithms with python>以及<Problem Solving with  Algorithms and Dat ...

  2. python 下的数据结构与算法---8:哈希一下【dict与set的实现】

    少年,不知道你好记不记得第三篇文章讲python内建数据结构的方法及其时间复杂度时里面关于dict与set的时间复杂度[为何访问元素为O(1)]原理我说后面讲吗?其实就是这篇文章讲啦. 目录: 一:H ...

  3. python 下的数据结构与算法---6:6大排序算法

    顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...

  4. python 下的数据结构与算法---4:线形数据结构,栈,队列,双端队列,列表

    目录: 前言 1:栈 1.1:栈的实现 1.2:栈的应用: 1.2.1:检验数学表达式的括号匹配 1.2.2:将十进制数转化为任意进制 1.2.3:后置表达式的生成及其计算 2:队列 2.1:队列的实 ...

  5. python 下的数据结构与算法---3:python内建数据结构的方法及其时间复杂度

    目录 一:python内部数据类型分类 二:各数据结构 一:python内部数据类型分类 这里有个很重要的东西要先提醒注意一下:原子性数据类型和非原子性数据类型的区别 Python内部数据从某种形式上 ...

  6. python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表

    目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...

  7. python 下的数据结构与算法---7:查找

    一:线性查找(Sequential Search) 线性查找可以说是我们用的最早也会是用的最多的查找方式了.其对应的是线性数据结构,回顾一下线性数据结构,其特点是先后加入的元素是有顺序的,相邻的.而线 ...

  8. Python实现的数据结构与算法之队列详解

    本文实例讲述了Python实现的数据结构与算法之队列.分享给大家供大家参考.具体分析如下: 一.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操 ...

  9. 用Python实现的数据结构与算法:开篇

    一.概述 用Python实现的数据结构与算法 涵盖了常用的数据结构与算法(全部由Python语言实现),是 Problem Solving with Algorithms and Data Struc ...

随机推荐

  1. Web前端浏览器兼容初探

    浏览器兼容是前端开发人员必须掌握的一个技能,但是初入前端的同学或者其他后台web开发同学往往容易选择忽略,而形成两个极端: 1 我最开始都是使用IE6,IE6上没问题,其它浏览器坑爹(多出现与前端后端 ...

  2. 读书笔记 -part1

    自从毕业以后到现在~看的书是越来越少了 の其实好像貌似从来没有认认真真的看书  除非工作遇到难于解决的问题迫不得已才去翻书看 有些问题也是莫名其妙的就这样解决了  于是乎被人美名其曰“高人”或&quo ...

  3. 适用于 PHP 开发人员的 Python 基础知识

    Thomas Myer, 负责人, Triple Dog Dare Media 简介: 您是一名经验丰富的 PHP 开发人员,并且希望学习 Python 吗?本文将从 PHP 开发人员的角度来探索 P ...

  4. 在线支付接口之PHP支付宝接口开发

    支付接口一般是第三方提供的代收款.付款的平台,可以通过支付接口帮助企业或个人利用一切可以使用的支付方式.常见支付平台:支付宝.快钱.云网支付.财付通. 支付宝页面:订单页面.状态页面.返回页面.--- ...

  5. postgres安装 以及修改postgres 密码

    #postgres安装 apt-get install postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3 postgresql-s ...

  6. php 编码规范(1)

    1. 包含尽量不要使用短标签例如 <? #coding ?> 2. 忽略结束标签,防止其他字符或者空格影响到代码 <?php$foo = 'foo'; 如果不开启压缩或者缓存输出时候 ...

  7. Collection Views and Building Custom Layouts-备

    UICollectionView的结构回顾 首先回顾一下Collection View的构成,我们能看到的有三个部分: Cells Supplementary Views 追加视图 (类似Header ...

  8. Ubuntu 下升级git到最新版

    $ sudo add-apt-repository ppa:git-core/ppa $ sudo apt-get update $ sudo apt-get install git

  9. weblogic使用脚本部署

    --本机 (/common/bin/wlst.sh (2)connect('weblogic','weblogic1','t3://localhost:7001') (3)progress=deplo ...

  10. ruby文档

    http://www.ruby-doc.org/http://rubyonrails.org/https://www.ruby-lang.org/zh_cn/downloads/http://ruby ...