- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
运行输出: 1!=1 2!=2 3!=6 4!=24 5!=120 6!=720 7!=5040 8!=40320 9!=362880 10!=3628800 说明: ① 从输出结果看,阶乘增加得非常快,7 以上的阶乘就超过了int类型的取值范围,这就是为什么要把返回值的类型定义为long int的原因,相应的输出格式是′%ld′。如果要求更大数的阶乘,可以选用float或double作为阶乘函数返回值类型。 ② 求阶乘函数中有个核心语句:双分支的if语句。其中的一个分支描述的是边界条件,另一个分支是递归调用。在递归调用中又出现了该函数的函数名,但这里的参数比函数头中的参数就简单了一些,这就是递归函数的书写模式。对于大多数递归函数,都可以这样考虑和书写。 在递归函数体中还可以出现不只一个的递归调用,它们各自有不同的参数。 【例5-19】 求Fibonacci数列:1,1,2,3,5,8,13,… 观察数列,可发现这样的规律:从第 3 项开始,每一项都是其前面两项之和。设fib(n)[JP]表示第n个Fibonacci数,则有: fib(n)=1 (n=1或n=2) fib(n)=fib(n-1)+fib(n-2) (n≥3) Fibonacci数列是个很有趣的数列,随着项数的增加,前后相邻两项的比值趋向于0.618,这个比值被称为“黄金分割”。建筑师经常用黄金分割来指导设计门窗、 房间和建筑物等,人们认为符合黄金分割的物体是一种美的物体。 Fibonacci函数的数学表达式已清楚地表明这是个递归问题,因此可以很容易地用C语言写出它的递归函数。 #include stdio.h long fib(int); main() { long bf; int n; printf(″Enter an integer: \n″); scanf(″%d″, n); bf=fib(n); printf(″Fibonacci(%d)=%ld″, n, bf); return 0; } long fib(int m) {if (m==1‖m==2) return 1; else return fib(m-1)+fib(m-2); } 运行输出: Enter an integer: 8↙ Fibonacci(8)=21 fib函数的递归调用如图5-17所示(这里是求fib(5))。 图5-17 求fib(5)的递归调用 对符合边界条件的基本问题可直接求出其解。 这里涉及到对操作数求值的次序问题。在fib(3)=fib(2)+fib(1)中,是先计算fib(2)还是先计算fib(1),ANSI C标准对此没有作出明确的规定,因此程序可对调用顺序不作任何假定。对本程序和大多数程序而言,计算结果都是正确的,但在某些程序中,操作数的运算顺序可能会影响表达式的最终结果。 在C语言的所有运算符中,ANSI C只规定了下面四种运算符对操作数的求值顺序:、‖、逗号和?:。前三个运算符是双目运算符,按从左到右的顺序计算它的两个操作数。最后一个是C语言中惟一的一个三目运算符,它最左边的操作数优先运算。至于其他运算符操作数的求值顺序,不同的系统有不同的规定。因此如果编写的程序依赖于操作数的求值顺序,将可能导致错误,因为编译器的执行顺序不一定会和编程者的想法一致。 另外,递归函数的调用次数也是个值得注意的问题。以本题为例,每次递归调用fib函数都要再递归地调用两次,因此当n很大时,对fib函数的调用次数将是惊人的,所以应该避免编写像fib函数这样的递归函数,即使要编写,参数也不应很大。 【例5-20】 把一个正整数的各位数字以字符形式输出。 #include stdio.h void digit(int); main() { int m; printf(″Input an integer:\n″); scanf(″%d″, m); digit(m); return 0; } void digit(int n) { if(n==0) return; else { digit(n/10); putchar(n%1
您可能关注的文档
- 程序设计基础——VisualBasic教程课件作者周黎钱瑛周阳花第4章节VisualBasic程序设计基础.ppt
- 程序设计基础——VisualBasic教程课件作者周黎钱瑛周阳花第5章节算法.ppt
- 程序设计基础——VisualBasic教程课件作者周黎钱瑛周阳花第8章节循环结构程序设计.ppt
- 汽车检测与故障诊断课件作者赵英勋第一章节汽车检测与故障诊断基础.ppt
- 程序设计基础——VisualBasic教程课件作者周黎钱瑛周阳花第11章节文件.ppt
- 程序设计基础——VisualBasic教程课件作者周黎钱瑛周阳花第12章节数据库编程技术.ppt
- 汽车电子控制技术课件作者冯渊主编第三章节.ppt
- 程序设计基础教程C语言课件作者杨有安陈维曹惠雅徐欣欣鲁丽第1章节C语言概述.ppt
- 汽车电子控制技术课件作者冯渊主编第十一章节.ppt
- 汽车检测与维修技术课件作者秦会斌3章节演示文稿.ppt
- 汽车电子控制技术课件作者于京诺第3章节汽车行驶稳定性控制系统.ppt
- 边用边学Photoshop服装与配饰的效果表现课件作者邱雅莉唐蓉第5章节.ppt
- 汽车检测与维修技术课件作者秦会斌12章节演示文稿.ppt
- 边用边学Photoshop服装与配饰的效果表现课件作者邱雅莉唐蓉第6章节.ppt
- 边用边学Pro_ENGINEER机械设计课件作者李彪王政第1章节.ppt
- 边用边学Pro_ENGINEER机械设计课件作者李彪王政第3章节.ppt
- 边用边学Pro_ENGINEER机械设计课件作者李彪王政第4章节.ppt
- 汽车检测与维修技术课件作者秦会斌13章节演示文稿.ppt
- 边用边学Pro_ENGINEER机械设计课件作者李彪王政第8章节.ppt
- 边用边学Pro_ENGINEER机械设计课件作者李彪王政第9章节.ppt
文档评论(0)