python 下的数据结构与算法---5:递归(Recursion)
定义:递归就是不断分割整体成部分直到可以轻易解决分割出来的部分。
递归表达式三定律:
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)的更多相关文章
- python 下的数据结构与算法---1:让一切从无关开始
这段时间把<Data Structure and Algorithms with python>以及<Problem Solving with Algorithms and Dat ...
- python 下的数据结构与算法---8:哈希一下【dict与set的实现】
少年,不知道你好记不记得第三篇文章讲python内建数据结构的方法及其时间复杂度时里面关于dict与set的时间复杂度[为何访问元素为O(1)]原理我说后面讲吗?其实就是这篇文章讲啦. 目录: 一:H ...
- python 下的数据结构与算法---6:6大排序算法
顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...
- python 下的数据结构与算法---4:线形数据结构,栈,队列,双端队列,列表
目录: 前言 1:栈 1.1:栈的实现 1.2:栈的应用: 1.2.1:检验数学表达式的括号匹配 1.2.2:将十进制数转化为任意进制 1.2.3:后置表达式的生成及其计算 2:队列 2.1:队列的实 ...
- python 下的数据结构与算法---3:python内建数据结构的方法及其时间复杂度
目录 一:python内部数据类型分类 二:各数据结构 一:python内部数据类型分类 这里有个很重要的东西要先提醒注意一下:原子性数据类型和非原子性数据类型的区别 Python内部数据从某种形式上 ...
- python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表
目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...
- python 下的数据结构与算法---7:查找
一:线性查找(Sequential Search) 线性查找可以说是我们用的最早也会是用的最多的查找方式了.其对应的是线性数据结构,回顾一下线性数据结构,其特点是先后加入的元素是有顺序的,相邻的.而线 ...
- Python实现的数据结构与算法之队列详解
本文实例讲述了Python实现的数据结构与算法之队列.分享给大家供大家参考.具体分析如下: 一.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操 ...
- 用Python实现的数据结构与算法:开篇
一.概述 用Python实现的数据结构与算法 涵盖了常用的数据结构与算法(全部由Python语言实现),是 Problem Solving with Algorithms and Data Struc ...
随机推荐
- DOM动态添加表格
var table=document.createElement("table"); table.border=1; var b=document.createElement(&q ...
- Hibernate 缓存机制(转)
一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...
- linux笔记2.20
用户相关: /etc/passwd 用户信息 /etc/shadow 密码信息 /etc/group 组信息 添加用户: useradd -u -g 修改用户: usermod - ...
- destoon程序中qq号码,手机号,msn必选项实现方法
最近发现好多客户,信息不完全!还是把qq号码,手机号,msn设为必选项比较好!下面以把qq设为必选项为例找到模板 template/default/member/edit.htm 找到 functio ...
- 将EmEditor加入到鼠标右键菜单
在清理系统的时候,无意中将EmEditor的鼠标右键功能给清理掉了,在EmEditor的配置中又没有找到如何加入到鼠标右键菜单的方法,只好使用导入注册表功能了,以下的代码,拷贝到记事本中,保存为EmE ...
- Spark运行问题备忘一(网络搜集)
问题一 ERROR storage.DiskBlockObjectWriter: Uncaught exception -9ca8//shuffle_1_1562_27 java.io.FileNot ...
- C++服务器linux开发环境管理
在游戏服务器开发中,跨平台不是必须的.线上游戏既有windows下的C++..Net服务器也有linux下的C++.go.erlang服务器.但是无论如何都要保证开发环境和线上运行环境的一致,否则不同 ...
- Android中layout_weight的属性理解
https://www.zybuluo.com/zzudhj/note/102067 在Android开发过程中,在编写布局文件经常会用layout_weight属性:从字面意思上看权重.比值.按比例 ...
- 文本阴影:text-shadow
例如: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- hdu 4856 Tunnels
http://acm.hdu.edu.cn/showproblem.php?pid=4856 这道题就是搜索BFS+状压dp,把所经过的隧道的状态用二进制表示,然后dp就行.bfs求出每两个隧道的最短 ...