- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 function 9-10
第9周实验 实验目的: (1)掌握函数的嵌套调用和递归调用使用方法 (2)理解递归调用求解问题的思想 实验内容: (1)P187—7.8,7.9 (2)P187—实验1 实验要求: (1)严格按照题目要求,利用迭代或递归方法进行求解问题。 (2)考虑边界测试条件。 课堂题目: 当m1 这个程序在Visual C++ 6.0环境下编译不会显示任何警告信息,但在Code:Blocks下编译会显示如下警告信息,提示程序第23行语句中的条件判断是永假的: warning: comparison of unsigned expression 0 is always false 递归与迭代 1,1,2,3,5,8,...... long Fib(int n) { long f; if (n == 0) f = 0; else if (n == 1) f = 1; else f = Fib(n-1) + Fib(n-2); return f; } 1 5 4 3 2 3 2 2 1 1 0 1 0 1 0 计算fib(5)共需15次fib调用 【例7.7】计算Fibonacci数列 递归与迭代 优点: 从编程角度来看,比较直观、精炼,逻辑清楚 符合人的思维习惯,逼近数学公式的表示 尤其适合非数值计算领域 hanoi塔,骑士游历、八皇后问题(回溯法) 缺点: 增加了函数调用的开销,每次调用都需要进行参数传递、现场保护等 耗费更多的时间和栈空间 应尽量用迭代形式替代递归形式 * 7.5变量的作用域和存储类型 7.5.1变量的作用域 ( Scope ) 指在源程序中定义变量的位置及其能被读写访问的范围 分为 局部变量(Local Variable) 全局变量(Global Variable ) 局部变量( Local Variable ) 在语句块内定义的变量 形参也是局部变量 特点 生存期是该语句块,进入语句块时获得内存,仅能由语句块内语句访问,退出语句块时释放内存,不再有效 定义时不会自动初始化,除非程序员指定初值 并列语句块各自定义的同名变量互不干扰 形参和实参可以同名 全局变量( Global Variable ) 在所有函数之外定义的变量 生存期是整个程序,从程序运行起占据内存,程序运行过程中可随时访问,程序退出时释放内存 有效范围是从定义变量的位置开始到本程序结束 全局变量( Global Variable ) 【例7.8】打印计算Fibonacci数列每一项时所需的递归调用次数 全局变量使函数间的数据交换更容易,更高效,但建议尽量少用,因为谁都可改写它,所以很难确定是谁改写了它 全局变量 7.5.2变量的存储类型( Storage Class) 指数据在内存中存储的方式 即编译器为变量分配内存的方式,它决定变量的生存期 存储类型 数据类型 变量名; C程序的存储类别 auto型(自动变量) static型(静态变量) extern型(外部变量) register型(寄存器变量) * 静态存储区中的变量:与程序“共存亡” 动态存储区中的变量:与程序块“共存亡” 寄存器中的变量: 同动态存储区 变量的生存期(Lifetime ) 决定何时“生”,何时“灭” 7.5.2变量的存储类型( Storage Class) auto 数据类型 变量名; auto体现在 进入语句块时自动申请内存,退出时自动释放内存 动态局部变量,缺省的存储类型 静态变量 static 数据类型 变量名; static storage class for local variables (declared inside a block or function) - the lifetime of the entire program 生存期为整个程序运行期间 自动变量和静态变量 【例7.11】利用静态变量计算整数n的阶乘n! 自动变量和静态变量 静态变量仅初始化一次,变量的值可保存到下次进入函数,使函数具有记忆功能 自动变量和静态变量 【例7.11】如果静态变量换成自动变量,结果如何? 静态局部变量和全局变量自动初始化为0值。自动变量不初始化时,值是随机值 寄存器变量 寄存器 CPU内部容量有限、但速度极快的存储器 register 类型名 变量名; 使用频率比较高的变量声明为register ,可使程序更小、执行速度更快 现代编译器有能力自动把普通变量优化为寄存器变量,并且可以忽略用户的指定 所以一般无需特别声明变量为register * 全局变量 静态外部变量
您可能关注的文档
最近下载
- 第5课《一着惊海天》课件(共38张ppt)2025—2026学年统编版语文八年级上册.pptx VIP
- 中国煤炭地下气化现场试验探索历程与前景展望.pdf VIP
- (热门!)SMETA劳动力供应链地图-SEDEX验厂专用文件(可编辑).pdf VIP
- 2025年8月广东深圳市光明区建筑工务署招聘一般专干、特聘专干3人笔试参考题库附答案解析.docx VIP
- 《品质》2014.ppt VIP
- 高校后勤服务管理概述.docx VIP
- 随机过程习题五答案.pdf VIP
- 党员发展工作细则试题和答案.doc VIP
- (完整word版)朗文版小学英语5A各单元知识点汇总-推荐文档.doc VIP
- 正式发布- GBT 5750-2023《生活饮用水标准检验方法》系列标准.docx VIP
文档评论(0)