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

递归表达式三定律:

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. JavaWeb学习笔记之JSP(一)

    1. JSP: 1.1. 为什么需要 JSP ? 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,但是其中的静态网页内容也需要程序员使用Java语言来进行输出,这就造成了大量代码的冗余 ...

  2. CSS布局注意(纯属个人总结)

    和CSS样式有关多用class,和后台数据有关多用id. 1.使用绝对定位时(偏移量如:top,left...),如果父类没有相对定位,使用绝对定位的元素是相对根元素(即<html>标签) ...

  3. 《Linux内核分析》 week4作业-使用嵌入式汇编调用一个系统调用

    一.fork的嵌入式汇编执行 #include <stdio.h> #include <unistd.h> int main(){ pid_t pid; asm volatil ...

  4. Secure CRT 如何连接虚拟机里面的CentOS系统 当主机没有网的时候 作者原创 欢迎转载

    当家里没有网络的时候: 1.第一步:首先保证主机所有的网卡都没有分享连接给VM8这一块网卡 如图:这个设置就保证了无线网络连接这块网卡没有分享给VM8这一块网卡 第二步:启用VM8这一块网卡,右键en ...

  5. javascript关于检测浏览器和操作系统的问题

    1.方法学: 最好是检测浏览器的最小版本,这样才不会当版本升级之后不断添加新的内容进去. 理想的方式: if(isMinIE5){ //code } 直接检查准确的版本的缺点: if(isMinIE5 ...

  6. phpCMS V9 自定义添加 全局变量{SKIN_PATH}方法

    前言:目前v9版本新增{js_path},{css_path},{img_path}三个全局变量,代替2008版本中{skin_path},样式图片脚本分开路径,确实达到了一定在后台管理方便的目的,但 ...

  7. 手机页面关于头部固定定位与input出现的问题

    前些天写了一个页面,要求头部导航进行固定定位position:fixed.内容区域有输入框input.在大多数手机上都是显示正常的,可偏在一些低版本的手机却出现问题了. 把我给苦恼的不行. 问题:头部 ...

  8. 浅谈 “空指针、野指针、void*”

            Author: JW. Zhou Date: 2014/7/2 一.空指针(0/NULL) 返回NULL和返回0是完全等价的,因为NULL和0都表示空指针,换句话说:空指针是什么,就是 ...

  9. Ubuntu14.04 weblogic11g集群环境测试

    在当前域下面新建两个服务器,服务器信息设置: server1:127.0.0.1:7010 server2:127.0.0.1:7020 第一步:新建服务器 (1)进入“服务器”,点击新建: (2)填 ...

  10. 64位平台C/C++开发注意事项(转载)

    转自http://coolshell.cn/articles/3512.html 在http://www.viva64.com/en/l/上例出了28个在64位平台上使用C/C++开发的注意事项,对于 ...