大学程序设计与算法语言《函数与递归》教学课件_第1页
大学程序设计与算法语言《函数与递归》教学课件_第2页
大学程序设计与算法语言《函数与递归》教学课件_第3页
大学程序设计与算法语言《函数与递归》教学课件_第4页
大学程序设计与算法语言《函数与递归》教学课件_第5页
已阅读5页,还剩25页未读, 继续免费阅读

下载本文档

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

文档简介

2026函数与递归程序设计与算法语言课程导览01函数初识从重复代码到封装思维02参数与返回打通函数内外数据通道03作用域与存储理解变量的生命周期04递归思想用自我调用破解复杂问题05经典递归案例从汉诺塔到斐波那契06递归与迭代权衡效率与优雅01函数初识把重复的事情交给函数去做重复代码呼唤封装思维先建立这个朴素动机,再学C语言函数写法,理解自然顺畅。重复即隐患痛点1同一段求和逻辑,算三科平均分写一遍,算五科平均分再搬一遍。2散落越多,修改越难——改一处忘了另一处,漏一处就出错。一处逻辑·多处复制封装即解法解法1把完成特定任务的代码打包、命名,用时直接调用。2不必每次重新发明菜谱,照写好的步骤执行即可。做法写一遍命名随时调用一处修改·处处生效小疑问快解答Q

为什么同一段求和逻辑要写两遍?A

散落的重复代码让修改变难,漏一处就出错。Q

如何解决重复代码?A

把完成特定任务的代码打包命名,用时直接调用,不必每次重新发明。函数的定义与调用定义三要素函数的身份声明函数名:说明“做什么”参数列表:接收输入返回类型:规定“交回什么”逻辑收进花括号调用机制程序执行流程写函数名+实际值程序跳进函数体干完活回到调用处,继续向下走程序跳转执行定义=造工具,调用=用工具核心比喻定义好的函数不会自己运行必须被调用才生效这是理解后续函数话题的起点函数执行函数名与返回类型定契约函数名与返回类型合起来,就是函数向调用者立下的契约调用者只看契约即可放心使用,不必关心内部实现。关注做什么,不纠缠怎么做。约契约的两半函数名说明“做什么”,一看便知用途。返回类型规定“交回什么”——整数、小数,或

void

不返回。你按约定给我输入→我按约定还你输出→动手封装第一个函数任务今天的任务是封装求最大值函数:两数取大函数三要素各就各位函数名:标识这个功能两个参数:接收待比较的整数一个返回值:交出比较结果三要素一次定义,处处调用比大小直接调用重复逻辑收进一处改规则只改函数体内几行封装复用02参数与返回数据进出函数的桥梁形参与实参的对应关系形参是空位,实参是内容。函数就像一台豆浆机——定义时只留好"投料口",调用时才算真正把豆子放进去。三个"对得上"是数据准确进入函数的第一道关口。定义定义时括号里写的是形式参数——只声明类型,不存真实数据调用时填入的实际参数才把具体值送进函数三个"对得上"数量对得上:形参几个,实参就几个顺序对得上:位置一一对应,不能错位类型对得上:收件栏写什么类型,包裹就得是什么类型比喻形参是快递单上的收件栏,实参才是真正寄出的包裹。传值调用:一份拷贝的旅程“借给同学一份笔记的复印件——他在复印件上勾画,你的原件依然干净。”传值即复制——真正要改原变量,需要借助指针等工具;本节课先守住这一个核心结论。核心机制2条传值即复制实参值复制一份交给形参,函数内部只操作这份副本修改不影响函数里改形参,不改调用处原变量——很多“改了没反应”的困惑,根源就在这里返回值:干完活交回结果返回值是函数交回调用处的结果,调用方用变量接住,如同从窗口取回办好的材料。输入靠参数,输出靠返回值

记住:return

是函数交回结果的唯一通道——参数负责“送进去”,返回值负责“带出来”。返回值:函数交回的结果规则速览返回值的本质函数交回调用处的结果,调用方用变量接住,如同从窗口取回办好的材料。类型已约定定义时声明返回类型,交回的值必须匹配。void表示无返回做完即止,不交回任何结果。只能交回一个结果想同时带出多个数据,需另想办法。参数与返回的综合演练数据流三步走:①进门,调用处准备半径作为参数传入;②加工,函数内部依据公式计算面积;③出门,通过返回值把结果交回主程序。进去的是半径,出来的是面积。参数负责把数据送进函数,返回值负责把结果带回主程序——一进一出,数据流闭环。第1步

进门①

进门调用处准备半径,作为参数传入函数第2步

加工②

加工函数内部依据公式计算面积第3步

出门③

出门通过返回值把结果交回主程序03作用域与存储每个变量都有自己的活动范围局部变量:只在函数内有效定义与生命周期2要点局部变量活动范围函数内部定义的变量,活动范围只限于该函数执行完毕即退场函数执行完毕,局部变量随即退场,不再占据内存,外界无法访问作用域类比理解1要点类比教室座位像教室里的座位安排——只对本节课的人有效,下课即作废类比核心优势2要点同名变量互不干扰不同函数可有同名变量,各自管理各自数据,互不干扰独立小世界每个函数成为相对独立的小世界,保证安全、减少冲突优势全局变量:整个程序共享定义位置:所有函数之外,可被程序内各个函数访问和修改。定义位置所有函数之外:可被程序内各个函数访问和修改公共公告板:像一块公共公告板——谁都能看、能写便利与代价省去传参麻烦任何函数都能改动,出错后难以追查是哪个环节动的手脚使用原则能用局部就不用全局:能用局部变量,就别轻易动用全局变量更小范围管理:把数据收在更小的范围内管理,程序才更清晰、更可靠静态变量与存储类别看清“能活多久、谁能看见”两个维度,才算真正理解作用域背后的内存规则。—静态变量与存储类别·核心主张普通变量vsstatic

变量2项默认局部变量每次调用重新创建,调用结束即消失。加

static

修饰值跨调用保留,下次进入函数仍记得上次结果。两种视角理解

static2项效果像计数器效果:像会记住进度的计数器,每次在上次基础上继续。关键作用域与存续并存关键:局部作用域与长期存续可同时成立。04递归思想函数调用自己,问题层层分解镜子里的递归:现象与本质递归,是让问题自己缩小自己递归,是让问题自己缩小自己现象两面镜子相对,层层嵌套,每一层都是同一个自己的缩小版。本质用自己来定义自己,函数执行中直接或间接调用它自己。核心机制大任务转交给更小一号的同类任务,层层下放,直到最小问题可直接解决。生活印证文件夹里套着文件夹请假流程要找上一级审批递归三要素:出口与递进设置递归的三大必要条件,逐项检查、缺一不可递归像俄罗斯套娃:打开一层,里面还有一层更小的自己。设计递归时,按三条要素逐项检查,而不是靠运气去试。01递归出口→最简单的情况直接给出答案,不再调用自己。02规模递进→每次调用都向出口靠近一步,问题规模有所缩小,不能原地打转。03同类分解→问题本身能拆成规模更小的同类子问题。三者缺一不可。设计递归时,按这三条逐项检查,而不是靠运气去试。递归执行:层层递进再回退递:一路向深处调用→归:从最深处逐层返回1第一步·向下钻取递

一路向深处调用问题规模不断缩小每层暂停等待下层结果2第二步·向上回溯归

出口拿到答案后逐层返回下层结果交给上层沿途拼出最终答案下去再回来,递归的完整轨迹05经典递归案例汉诺塔、斐波那契与递归的优雅阶乘:递归的入门范本“递出去是分解,归回来是答案”递出去是分解,归回来是答案为什么从阶乘入门零基础友好数学定义自带自引用:n!=n×(n−1)!,0!=1定义可直接翻译成函数,无需额外建模三要素一一对应递归三大件01递归出口n=0时返回102递归递进用n−1调用自身03手动展开一路乘到出口,再逐层折回斐波那契:递归的双分支结构从阶乘的单链走向斐波那契的双分支树状展开“同一值会被重复计算多次,效率隐患留给下一章正面讨论。”预习提示双分支让调用像树杈一样越分越多,同一值被重复计算多次——这个效率隐患,留给下一章递归与迭代对比时正面讨论。定义前两项均为1,从第三项起,每项等于前两项之和。递归写法边界项直接返回1;其余各项,返回前两项递归结果之和。

形态对比阶乘vs斐波那契阶乘

单链递归一次调用只触发

一个分支。斐波那契

双分支递归一次调用触发

两个分支,问题规模以树状展开。汉诺塔:递归化繁为简的经典把一摞按大小叠放的圆盘从起始柱移到目标柱,可借助中间柱,大圆盘始终不能压在小圆盘上。01递归思路——三步化解1移走上面n-1个整体搬到中间柱2移动最大圆盘直接放到目标柱3再移那n-1个从中间柱搬到目标柱递归思路:第一步和第三步,本身就是规模小一号的汉诺塔问题。看似无从下手,递归三步拆解。递归在查找与排序中的身影递归不止于谜题,更在实用算法中举足轻重。共同特征:问题可分解、规模在缩小、边界可直达。递归不止于谜题,更在实用算法中举足轻重。二分查找有序数据每次折半,区间收缩至命中目标。快速排序选定基准值,分成较小与较大两部分,再分别递归排序。06递归与迭代在优雅与效率之间做出选择递归与迭代:同题的不同求解阶乘n!既可用递归求解,也可用循环迭代求解递归版按数学定义一气呵成,先描述规则,再交给出口迭代版用一个循环从1连乘到n,靠循环变量逐步累积思维路径相反递归从整体向细分,自顶向下拆解迭代从头到尾推进,自底向上累积两者都能算出正确结果。原则上,能用迭代解决的问题通常也能改写成递归,反之亦然。先确认这种互通关系,再谈取舍,才能客观看待递归的价值与代价。同一问题,两种写法,都能算出正确结果——先懂互通,再谈取舍。递归

迭代效率视角:重复计算与栈开销“代价清楚了,选择才有底气。”“代价清楚了,选择才有底气。”时间代价斐波那契递归中,同一中间值被反复计算多次,计算量随规模急剧膨胀;迭代版本每项只算一次,顺推不浪费。打个比方:递归像反复点同一份外卖,每次都要重新下单;迭代像一次做好存冰箱,随取随用。结果:N越大,递归的多

温馨提示

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

评论

0/150

提交评论