c语言递归函数
递归(recursion)就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。
递归通常用来解决结构自相似的问题。所谓结构自相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。实际上,递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。因此,递归有两个基本要素:
(1)边界条件:确定递归到何时终止,也称为递归出口。
(2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果
汉诺塔问题:对汉诺塔问题的求解,可以通过以下3个步骤实现:
(1)将塔上的n-1个碟子借助塔C先移到塔B上;
(2)把塔A上剩下的一个碟子移到塔C上;
(3)将n-1个碟子从塔B借助塔A移到塔C上。
在递归函数中,调用函数和被调用函数是同一个函数,需要注意的是递归函数的调用层次,如果把调用递归函数的主函数称为第0层,进入函数后,首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层。反之,退出第i+1层调用应该返回第i层。采用图示方法描述递归函数的运行轨迹,从中可较直观地了解到各调用层次及其执行情况,具体方法如下:
(1)写出函数当前调用层执行的各语句,并用有向弧表示语句的执行次序;
(2)对函数的每个递归调用,写出对应的函数调用,从调用处画一条有向弧指向被调用函数入口,表示调用路线,从被调用函数末尾处画一条有向弧指向调用语句的下面,表示返回路线;
(3)在返回路线上标出本层调用所得的函数值。n=3时汉诺塔算法的运行轨迹如下图所示,有向弧上的数字表示递归调用和返回的执行顺序
三、递归函数的内部执行过程
一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。为了保证递归函数的正确执行,系统需设立一个工作栈。具体地说,递归调用的内部执行过程如下:
(1)运动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址;
(2)每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;
(3)每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。
上述汉诺塔算法执行过程中,工作栈的变化如下图所示,其中栈元素的结构为(返回地址,n值,A值,B值,C值),返回地址对应算法中语句的行号,分图的序号对应图中递归调用和返回的序号
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
excel中的subtotal函数怎么用
excel中SUBTOTAL函数是一个汇总函数,它可以包括求和、汇总、平均等等多个函数的使用。SUBTOTAL函数的优点在于可以忽略隐藏的单元格、支持三维运算和区域数组引用。
SUBTOTAL函数就是返回一个列表或数据库中的分类汇总情况。
SUBTOTAL函数可谓是全能王,可以对数据进行求平均值、计数、最大最小、相乘、标准差、求和、方差。
当然这些功能EXCEL另外设有专门的函数来完成,要学习的就是SUBTOTAL函数能完成一些其它函数很难完成的方法与技巧,先看一下EXCEL帮助文件中对SUBTOTAL函数的解释。-递归
SUBTOTAL函数语法:SUBTOTAL(function_num, ref1, ref2, ...)
第一参数:Function_num为 1 到 11(包含隐藏值)或 101 到 111(忽略隐藏值)之间的数字,指定使用何种函数在列表中进行分类汇总计算。
第二参数:Ref1、ref2为要进行分类汇总计算的 1 到 254 个区域或引用。
SUBTOTAL函数的使用关键就是在于第一参数的选用。
SUBTOTAL第1参数代码对应功能表如下图所示:-c
SUBTOTAL函数功能比较全面,与其它专门函数相比有其独特性与局限性:
1:可以忽略隐藏的单元格,对可见单元格的结果进行运算;经常配合筛选使用 ,但只对行隐藏有效,对列隐藏无效;此处第一参数与对二参数对隐藏的区别:在于手工隐藏,对筛选的效果是一样的。
2:支持三维运算。
3:只支持单元格区域的引用
4:第一参数支持数组参数。-递归
软件工程师要学习什么课程
想成为软件设计师你要看的书包括:
1:数据结构 目前清华大学严蔚敏老师的数据结构是一个经典.可能的话,再搜罗其他版本的教程,这样可以互相印证.
2:操作系统(第三版),主要从资源管理的角度来分析系统功能的实现。假设你要设计一个新的操作系统,如何实现它?操作系统理论就是向读者逐步介绍和解释。重点是五大管理职能的实现及其原理。
3:计算机网络(第三版),要学习ISO/OSIRM七层的划分以及各种协议的功能。传输理论、互联设备、Internet知识,和参考模型理论.
4:计算机专业英语,不是软件考试特有的,是专业知识+英语水平,考前不需专业准备,平时有意识地上网读点英文专业资料.
5:软件工程(第二版) 要熟悉数据流图和流程图
6:数据库理论.这要求熟悉SQL的语言.
7:C语言或者VB语言应该掌握
最后要学习统一建模语言UML,它代表了软件工程的发展趋势,目前是可视化建模的事实上的工业标准。
计算机学习要经历一个从理论———实践———理论的认识不断深化的过程,这一过程是非常艰辛的.但是要相信“天道酬勤”的道理,你最终会成为一名优秀的软件设计师的~~祝你成功
第一阶段课程内容 序号 课程名称 主要内容 参考资料 课时 ① 编成基础 计算机硬件,软件简介,可视化编成 20课时 ② Java基础 面向对象编程,JAVA开发环境,JAVA语法,异常处理,集合框架,数据结构,I/O输入输出流,JDBC,线程,jdk新特性。 Java就业培训教程.pdf 80课时 ③ XHTML HTML4.0 XHTML1.0 HTML完全手册.chm 20课时 ④ Javascript+css 客户端脚本语言 jscript中文参考手册.chm css2.0.chm 20课时 开发工具 MYECLIPSE插件,TOMCAT,ANT, Websphere, resin ⑤ JSP动态网站 servlet ,JSP运行原理,JSP语法,HTTP协议,JSP内置对象,COOKIE,JDBC。案例:(购物车,聊天室程序,通讯录,留言板)。 80课时 ⑥ JSTL标签库 JSTL标签库,自定义标签库。 20课时 ⑦ B/S软件架构 JSP+Servlet+JavaBean+JDBC(MVC架构) 20课时 ⑧ 数据库原理 数据库系统简介,数据库原理 数据库操作,sql语句,范式,关系,约束,存储过程,触发器,事务。 20课时 ⑨ 软件工程( 组件化) 软件需求分析,软件数据建模,软件架构设计,软件开发规范,原形+迭代开发模式,软件架构分析。 20课时 10 项目实践 常用组件详细讲解,上传文件组件,分页组件,主键生成组件,权限处理,考试管理系统,小型论坛,网上书店管理,等电子商务系统。 20课时 软件工程概论 简介, 开发模式,CMMI 12课时 项目管理 项目计划(项目的整体时间,人员安排,阶段性工作内容),任务跟踪。 需求分析 需求管理与配置管理:需求调研,分析,系统范围配置标识,版本控制,配置审核(VSS,CVS),实际项目需求数据建模PowerDesigner 业务建模rose2007(类的关系)。拓展:svn 40课时 软件测试概论 1.测试基础(概述,角色,测试所需条件) 2.测试目的以及原则 3.测试分类 4.测试方法 5.静态白盒测试,静态黑盒测试,动态白盒测试,动态黑盒测试 6.测试计划,测试用例 7.需求评审 8.原型评审,设计评审 9.实际项目需求评审 10. bug管理工具 28课时 Web2.0 Flex(语法,控件应用,远程方法访问) AJAX。拓展:dwr深层研究 40课时 原型开发 原型设计规范 软件设计 数据库设计 概要设计 架构设计 详细设计 设计评审 面向对象设计 20课时 XML 扩展的标记语言,XML, XSLT,DTD,SAX,DOM, JDOM等解析 20课时 STRUTS2 过滤器,Struts1,Struts2高级部分(标签库,验证框架,拦截器,源码分析,连接池,国际化,插件安装),AOP基础,JNDI。拓展:JSF, Tapestry,velocity 40课时 Spring IOC,JDBC,MVC,AOP,事务。 hibernate 数据持久化。拓展:EJB3.0, ibatis,搜索功能lucene webservice Soap协议,分布式。拓展:JMS Oracle数据库 大型数据库开发。拓展:DB2 20课时 软件测试 单元测试 集成测试 系统测试 验收测试 60课时 毕业答辩 演讲能力,面试技巧,面试题,答辩 20课时 以上是学成软件工程师的课程体系。
-c