- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
7.6 递归(续5) #include stdio.h double fact(int n) { if(n=0) return 1.0; return n?fact(n?1); /? fact(n)的函数值是n?fact(n?1) ?/ } void main() { int n; printf(Input n=);scanf(%d,n); printf(fact(%d)=%.0f\n,n,fact(n)); } 7.6 递归(续6) 例7.20 用递归函数计算fibonacci数列的第n项。 递归算法设计:函数fib(n)计算fibonacci数列的第n项。 当n=1或2时,fib(n)=1; 当n2时, fib(n)=fib(n?1)+fib(n?2). 即: fib(n)= 1 n=1,2 fib(n-1)+fib(n-2) n2 long fib(int n) { if(n=2) return 1L; return fib(n-1)+fib(n-2); } 7.6 递归(续7) 例7.21用递归函数计算两个自然数a,b的最大公约数。 递归算法设计: 函数gcd(a,b)计算两个自然数的最大公约数。 b=0时,gcd(a,b)=a b?0时,gcd(a,b)=gcd(b,a%b) int gcd(int a,int b) { if(!b) return a; return gcd(b,a%b); } 7.6 递归(续8) 2. 操作递归 例7.22 用递归算法实现N元数组元素逆序存储。 递归算法设计: 函数reverse(a,s,t): 数组元素a[s~t]逆序存储。 当s?t时, 空操作 当st时, (1) a[s]?a[t]; (2) reverse(a,s?1,t?1); 子数组a[s+1~t?1]逆序存储 第一次调用格式为:reverse(a,0,N?1); 7.6 递归(续9) a[0] a[1] … … a[N?2] a[N?1] s t 元素换值 reverse(a, s, t) reverse(a, s+1, t-1) #include stdio.h #define N 10 void reverse(int a[],int s,int t) { int temp; if(s=t) return; 7.6 递归(续10) temp=a[s];a[s]=a[t];a[t]=temp; reverse(a,s+1,t?1); } void main() { int a[N],i; printf(Input %d integers:\n,N); for(i=0;iN;i++) scanf(%d,a[i]); reverse(a,0,N?1); for(i=0;iN;i++) printf(%4d,a[i]); printf(\n); } 7.6 递归(续11) 例7.23用递归法实现N元实型数组由大到小冒泡排序。 递归算法设计: 函数sort(a,n) 实现数组元素a[0~n]由大到小冒泡排序。 当n=0时, 空操作 当n0时, (1) 将最小元用冒泡法推到元素a[n]位置处; (2) 对a[0~n?1]由大到小冒泡排序,即 sort(a,n?1); #include stdio.h #define N 8 void sort(double a[],int n) { int j;double t; if(n=0) return; for(j=0;jn;j++) if(a[j]a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t; } sort(a,n?1); } void main() {double a[N];int i; for(i=0;iN;i++) scanf(%lf,a+i); sort(a,N?1); for(i=0;iN;i++) printf(%8.2f,a[i]); } 7.6 递归(续12) 例7.24 输入一个正长整数,用递归算法输出该整数的各位数字。比如,如果输入为34705,则输出是 3 4 7 0 5(要求各位数字之间有空格分隔)。 递归算法设计: 函数void pr(long n): 输出正长整数n的各位数字。 (1)若n没有数字,则空操作;(n=0
您可能关注的文档
- 2016网上作业微生物作业MicrosoftWord文档摘要.doc
- 2016物理中考必备第十章浮力摘要.ppt
- 2016细胞培养准备摘要.ppt
- 2016新棵标版高考数学高频考点经典题例1摘要.doc
- 2016燕山中考物理一模试题及答案摘要.doc
- 2016一轮复习第2、3节__通过激素的调节·神经调节与体液调节的关系摘要.ppt
- 2016议论文写作的并列式结构(最新)摘要.docx
- 2016职称英语(理工ABC)考试指导书文章原文和翻译word正常版摘要.doc
- 2016中国的自然资源(复习)摘要.ppt
- 2016中考地理世界的地形、气候与河流及其对人类活动的影响类型三世界的主要河流及对人类活动的影响课件摘要.ppt
原创力文档


文档评论(0)