大一下-数算sessdsa-04recursion数据结构与算法Python04递归_第1页
大一下-数算sessdsa-04recursion数据结构与算法Python04递归_第2页
大一下-数算sessdsa-04recursion数据结构与算法Python04递归_第3页
大一下-数算sessdsa-04recursion数据结构与算法Python04递归_第4页
大一下-数算sessdsa-04recursion数据结构与算法Python04递归_第5页
免费预览已结束,剩余24页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构与算法(Python)-04:递 据 〉本章目据结与 〉什么是递与算( 〉实现递(〉)〉〉动态规划Dynamic地球与空间科学学院 本章目据 据结与 与算( (〉)〉〉地球与空间科学学院 什么是递归结数 〉 递归是一种解决问题的方,其精髓是将问题分解为规模更小的据 同问题,持续分,直到问题规模小到可以用非常简单直接的方式构 。结与法 递归的问题分解方式非常独特,其算法方面的明显特征就是:在法 法流程中调用自身 递归为我们提供了一种对复杂问题的优雅解决方案,精妙的递归 法常会出奇简单,令人赞地球与空间科学学院 初识递归 我们先从一个不太复杂的问题开据构 问题:给定一个列表,返回列表中所有数的构 算( 程序很简单,但假如没有循环语句( 还能对不确定长度〉 我们认识到求和实际上最终是由一次次的加法实现的,而加法函恰有两个参数,这个是确定的。 看看怎么想办法,将问题规模较大的列表求和,分解为规模较小且固定的两个数求和(加法地球与空间科学学院 初识递归 我们换一个方式来表达数列求和:全括号表达 结与 当然,由于加法可交换,写成下面的方式可能更方便些与法 法(〉 上面这个式子,最内层的括号(7+9,这是无需循即可计算的,实际上整个求和的过程是这样:) 观察上述过程中所包含的重复模式,可以把求和问题归纳成这样问

相同问题,规地球与空间科学学院 初识递归 上面的递归算法变成程与 与算 (

) 上面程序的要点地球与空间科学学院 递归程序如何被执行 递归函数调用和返回过程的链据地球与空间科学学院 递归“三定律 为了 的“机器人三定律”致敬,递归算法也总结出“ 定律 构 法 法( 数列求和的递归算法首先具备了基本结束条件:当列表长度为1的候,直接输出所包含的唯一数,使递归算法具备了最终 是什么〉数列求和处理的数据对象是一个列表,而基本结束条件是长度为1的〉 调用自身是递归算法中最难理解的部分实际上我们理解为“分解成了规模更小的相同问题”就可以了,在数列求和算法中,就是“数列的求和问。地球与空间科学学院 随堂作业4- 用listsum计算数列求和[2,4,6,8,10]要进行多少次递归调用 A)6B)5C)4算 写出计算阶乘的递归程算 (def chbpku和课 具有提地球与空间科学学院 整数转换为任 这个在数据结构栈里讨论过的算法,又回来了结 结构 如果上次你被“入栈”“出栈”搞得挺晕乎的话,这次递归算法法 定会让你感到清法 我们用最熟悉的十进制分析下这个问十进制有十个不同符号:convString地球与空间科学学院 整数转换为任 我们用整数除,和求余数两个计算来将整数一步步拆结 结构 问题就分解为算 (整数商成为“更小规模”问题,通过递归调用自身)地球与空间科学学院 整数转换为任意进制:代 下面就是递归算法的代构算算)地球与空间科学学院 递归调用的实 当一个函数被调用的时候,系统会把调用时的现场(包括所有的 部变量,以及返回地址)压入到调用栈Call结 每次调用,压入栈的现场数据称为StackFrame栈与法 当函数执行完成,返回时,要从调用栈的栈顶取得返回地址,把法 回值放到栈顶,恢复现场,弹出栈帧,按地址返回 返回 返回 地球与空间科学学院 递归的故 一个古老 :有始无终的无尽递结 结 与 法 前目的地): : 游轮 地球与空间科学学院 随堂作业4- 编写将字符串反转的递归函 def算 编写回文词判断的递归函算 def( chbpku和课 具有提)地球与空间科学学院 递归可视化:图 前面的种种递归算法展现了其简单而强大的一面,但还是难有个 观的概念,下面我们通过递归作图来展现递归调用的视觉影结 Python的海龟作图系统turtle算 算 (爬行:forward(n转向:left(a 笔触:penup(pendown(pensize( 使用方importturtletturtle.Turtlew=turtle.Screen()#获取屏幕对象,用于最后的点击自动关闭窗口 地球与空间科学学院 海龟作 画正方据构 画五边构与 画六边法 画五角)地球与空间科学学院 一个递归作图的例子:螺(最小规模,0直接退 减小规模,边长减分形树:自相似递归图 分形Fractal,是1975年由Mandelbrot开创的新学据与法结 〉 通常被定义为“一个粗糙或零碎的几何形可以分成个部分构 且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相算 。与法( 自然界中能找到众多具有分形性质的物 ) 地球与空间科学学院 yy0分形树:自相似递归图0 自然现象中所具备的分形特性,使得计算机可以通过分形算法生结 非 真的自然场景,下面我们以树为例做一个粗糙的近结构 分形是在不同尺度上都具有相似性的事物,将这种观点放在对树法 观察上,我们就能看出,一棵树的每个分叉和每条树枝,实际上法 具有整棵树的外形特征(也是逐步分叉的 这样,我们可以把树分解为三个部分:树干、左边伸出的小树、 边伸出的小大大空分形树:代算

(法最小规模,0(右倾20)减小规模,树干减回右倾20度,即回

地球与空间科学学院 分形树:运 注意海龟作图的次结 结画树,树干长度斯基三角形Sierpinski 分形构造,平面 斯基三角形 斯基金字 实际上,真正 结 与 ( ()斯基三角形:作图 首先,根据自相似特性 斯基三角形是由3个相同 基三角形按照品字形拼叠而成 由于我们无法真正做 斯基三角形(degree->∞),只能法 degree有限的近似图形法( 在degree有限的情况下,degree=n的三角形,是由3个degree=n-的三角形按照品字形拼叠而成,同时,这3个degree=n-1的三 边长均为degree=n的三角形的一半(规模减小)0地球与空间科学学院

斯基三角形:代等边三角形(左上右顶点次序算与最

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论