C语言程序设计——基于计算思维的培养 课件 第6章 函数.ppt

C语言程序设计——基于计算思维的培养 课件 第6章 函数.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

递归函数设计2个函数:将n个圆盘借助C从A移到B将一个圆盘从A移到BACB将n-1个圆盘从A移到C将n号圆盘从A移到B将n-1个圆盘从C移到BHanoi(intn,chara,charb,charcMove(intn,chara,charb);step1Hanoi(n-1,a,c,b)step2Move(n,a,b)Step3Hanoi(n-1,c,b,a)递归函数递归方法的基本原理将一个复杂问题逐步分解并最终简化为一个显而易见的小问题这个小问题的解决,意味着整个复杂问题的解决递归函数递归函数【例6.5】编写程序,用递归法计算整数x的n次幂xn。longPower(intx,intn) /*函数定义*/{if(n==0)return1;elsereturnx*Power(x,n-1);}一般情况基线情况递归函数递归调用应该能够在有限次数内终止递归递归调用若不加以限制,将无限循环调用必须在函数内部加控制语句,仅当满足一定条件时,递归终止,称为条件递归任何一个递归调用程序必须包括两部分递归循环继续的过程递归调用结束的过程if(递归终止条件成立)return递归公式的初值;elsereturn递归函数调用返回的结果值;递归函数每个递归函数必须至少有一个基线条件一般情况必须最终能简化为基线条件递归层数太多易导致栈空间溢出后果很严重,程序被异常中止优点:从编程角度来看,比较直观、精炼,逻辑清楚符合人的思维习惯,逼近数学公式的表示尤其适合非数值计算领域hanoi塔,骑士游历、八皇后问题(回溯法)缺点:增加了函数调用的开销,每次调用都需要进行参数传递、现场保护等耗费更多的时间和栈空间应尽量用迭代形式替代递归形式递归与迭代的比较变量的作用域与存储类型什么是变量的作用域?指在源程序中定义变量的位置及其能被读写访问的范围分为局部变量全局变量局部变量指在函数或语句块内定义的变量形参也是局部变量特点生存期是该语句块,进入语句块时获得内存,仅能由语句块内语句访问,退出语句块时释放内存,不再有效定义时不会自动初始化,除非程序员指定初值并列语句块各自定义的同名变量互不干扰形参和实参可以同名在所有函数之外定义的变量生存期是整个程序,从程序运行起占据内存,程序运行过程中可随时访问,程序退出时释放内存有效范围是从定义变量的位置开始到本程序结束全局变量变量的存储类型指数据在内存中存储的方式即编译器为变量分配内存的方式,它决定变量的生存期变量定义格式:存储类型数据类型变量名;C语言的存储类别auto型(自动变量)static型(静态变量)extern型(外部变量)register型(寄存器变量)变量的存储类型■变量的生成期:决定何时“生”,何时“灭”静态存储区中的变量:与程序“共存亡”动态存储区中的变量:与所在函数“共存亡”寄存器中的变量:同动态存储区自动变量与静态变量auto数据类型变量名;auto体现在进入函数/语句块时自动申请内存,退出时自动释放内存动态局部变量,缺省的存储类型静态变量static数据类型变量名;在语句块/函数内声明的静态局部变量,其生存期为整个程序生存期为整个程序运行期间自动变量与静态变量#includestdio.hintf(inta);intmain(){ inta=2,i; for(i=0;i3;i++) { printf(%d\t,F(a)); } printf(\n); return0;}intF(inta){ autointb=0; staticintc=3; b++; c++; returna+b+c;}静态变量仅初始化一次,变量的值可保存到下次进入函数,使函数具有记忆功能运行结果:789自动变量与静态变量#includestdio.hintf(inta);intmain(){ inta=2,i; for(i=0;i3;i++) { printf(%d\t,F(a)); } printf(\n); return0;}intF(inta){ autointb=0; intc=3; b++; c++; return

您可能关注的文档

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档