




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章第1页第1页本章要点函数概念函数定义与调用函数递归调用数组作为函数参数 变量作用域函数作用域大连理工大学软件学院第2页第2页main() 调用fa()fa()调用fb()fb()void fb( ) void fa( ) fb(); void main( ) fa(); 返回fa() 返回main() 7. 函数嵌套调用定义 申明 调用?大连理工大学软件学院第3页第3页例1:输入4个整数,找出其中最大数。用函数嵌套调用来处理。(递推) 7. 函数嵌套调用#include void main() int max_4(int a,int b,int c,int d); / max_4函数申明
2、 int a,b,c,d,max; printf(Please enter 4 interger numbers:); scanf(%d %d %d %d ,&a,&b,&c,&d); max=max_4(a,b,c,d); /* 调用max_4函数 */ printf(max=%d n,max); 大连理工大学软件学院第4页第4页int max_4(int a,int b,int c,int d) int max_2(int,int);int m;m=max_2(a,b); m=max_2(m,c); m=max_2(m,d); return(m);int max_2(int a, int
3、b)if(ab) return a; else return b;运营情况下列:Please enter 4 interger numbers:11 45 54 0max=45大连理工大学软件学院第5页第5页例2:定义一个求 bin(n,k)函数。分析: 定义函数 fact ( m ) = m ! bin ( n , k ) = fact ( n ) / ( fact ( k ) * fact ( n - k ) ) 由主函数输入数据 a 、 b ,求 bin ( a , b ) 7. 函数嵌套调用大连理工大学软件学院第6页第6页#includelong fact ( int m ) int
4、i ; long sum = 1 ; for ( i = 1 ; i = m ; i+ ) sum *= i ; return sum ;long bin ( int n , int k ) return long ( fact ( n ) / ( fact ( k ) * fact ( n-k ) ) ) ; void main ( ) int a , b; long f1 , f2 ; scanf(“%d %d”, &a, &b) ; f1 = fact ( a ) / ( fact ( b ) * fact ( a-b ) ) ; f2 = bin ( a , b ) ;大连理工大学软件
5、学院第7页第7页/函数嵌套调用示例求组合#includelong fact ( int m ) int i ; long sum = 1 ; for ( i = 1 ; i )例4:递归求年龄大连理工大学软件学院第24页第24页#include int age(int n)int c;if(n=1)c=10;elsec=age(n-1)+2;return c;void main()printf(%dn,age(5);运营结果下列:18 递归形式递归终止条件基本情况修改递归条件递推法实现:void main()int i,sum=10;for(i=1;i=4;i+)sum=sum+2;print
6、f(%dn,sum);大连理工大学软件学院第25页第25页int Factorial ( int n ) if ( n = = 0 ) return 1 ; else return n * Factorial ( n - 1 ) ;递归形式递归终止条件基本情况修改递归条件 7.6 函数递归调用 例5:递归求n阶乘大连理工大学软件学院第26页第26页int Factorial ( int n ) if ( n = = 0 ) return 1 ; else return n * Factorial ( n - 1 ) ;k3F (k)Output 3! = ?n3F (3)3* F (2)n2F
7、(2)2* F(1)n1F (0)1计算 Factorial (3) = 3!F(1)n01* F(0) 7.6 函数递归调用 大连理工大学软件学院第27页第27页k3F (3)Output 3! = ?n3F (3)3* F (2)n2F(2)2* F(1)n1F (0)1F(1)n01* F(0)1计算 Factorial (3) = 3!int Factorial ( int n ) if ( n = = 0 ) return 1 ; else return n * Factorial ( n - 1 ) ; 7.6 函数递归调用 大连理工大学软件学院第28页第28页k3F (3)Out
8、put 3! = ?n3F (3)3* F (2)n2F(2)2* F(1)n1F(1)计算 Factorial (3) = 3!F (1) = 11int Factorial ( int n ) if ( n = = 0 ) return 1 ; else return n * Factorial ( n - 1 ) ; 7.6 函数递归调用 大连理工大学软件学院第29页第29页k3F (3)Output 3! = ?n3F (3)3* F (2)n2F(2)F(2) = 22计算 Factorial (3) = 3!int Factorial ( int n ) if ( n = = 0
9、) return 1 ; else return n * Factorial ( n - 1 ) ; 7.6 函数递归调用 大连理工大学软件学院第30页第30页k3F (3)Output 3! = ?n3F (3)F(3) = 6计算 Factorial (3) = 3!int Factorial ( int n ) if ( n = = 0 ) return 1 ; else return n * Factorial ( n - 1 ) ; 7.6 函数递归调用 大连理工大学软件学院第31页第31页k3F (3)Output 3! = 63! = 6计算 Factorial (3) = 3!
10、int Factorial ( int n ) if ( n = = 0 ) return 1 ; else return n * Factorial ( n - 1 ) ; 7.6 函数递归调用 大连理工大学软件学院第32页第32页k3F (3)k3F (3)n3F (3)3* F (2)n2F(2)2* F(1)n1F (0)1F(1)n01* F(0)F (1) = 1F(2) = 2F(3) = 6Output 3! = 6计算 Factorial (3) = 3!int Factorial ( int n ) if ( n = = 0 ) return 1 ; else return
11、 n * Factorial ( n - 1 ) ; 7.6 函数递归调用 大连理工大学软件学院第33页第33页int Fibonacci ( int n ) if ( n = 2 ) return 1 ; else return Fibonacci ( n-1 ) + Fibonacci ( n-2 ) ; 7.6 函数递归调用 例6:递归求斐波那契数列递归形式递归终止条件基本情况修改递归条件递归形式修改递归条件大连理工大学软件学院第34页第34页int Fibonacci ( int n ) if ( n = 2 ) return 1 ; else return Fibonacci ( n
12、-1 ) + Fibonacci ( n-2 ) ; Fibonacci (5)Fibonacci (4)Fibonacci (3)Fibonacci (3)Fibonacci (2)Fibonacci (2)Fibonacci (1)大连理工大学软件学院第35页第35页Fibonacci (5)Fibonacci (4)Fibonacci (3)Fibonacci (3)Fibonacci (2)Fibonacci (2)Fibonacci (1)11+2int Fibonacci ( int n ) if ( n = 2 ) return 1 ; else return Fibonacci
13、 ( n-1 ) + Fibonacci ( n-2 ) ; 大连理工大学软件学院第36页第36页Fibonacci (5)Fibonacci (4)Fibonacci (3)2Fibonacci (3)Fibonacci (2)13int Fibonacci ( int n ) if ( n = 2 ) return 1 ; else return Fibonacci ( n-1 ) + Fibonacci ( n-2 ) ; 大连理工大学软件学院第37页第37页Fibonacci (5)Fibonacci (3)3Fibonacci (3)Fibonacci (1)Fibonacci (2
14、)112int Fibonacci ( int n ) if ( n = 2 ) return 1 ; else return Fibonacci ( n-1 ) + Fibonacci ( n-2 ) ; 大连理工大学软件学院第38页第38页Fibonacci (5)Fibonacci (4)Fibonacci (3)Fibonacci (3)Fibonacci (2)Fibonacci (1)Fibonacci (2)Fibonacci (2)Fibonacci (1)532211111int Fibonacci ( int n ) if ( n = 2 ) return 1 ; else
15、 return Fibonacci ( n-1 ) + Fibonacci ( n-2 ) ; 大连理工大学软件学院第39页第39页 7.6 函数递归调用 递推:知道第一个,推出下一个,直到到达目的。 递归:要知道第一个,需要先知道下一个,直到一个已知 ,再反回来,得到上一个,直到第一个。递推:从已知到未知,从简朴到复杂。递归:从未知到已知,从复杂到简朴。递推:直接自下向顶运算,由f(1)算到f(n)。 递归:自顶向下逐步拓展需求,最后自下向顶运算。即由f(n) 拓展到f(1),再由f(1)逐步算回f(n)。递归:在函数内调用函数本身。递推:往往通过循环迭代求值。递归与递推(迭代)比较大连理工
16、大学软件学院第40页第40页递归与非递归比较递归目的是简化程序设计,使程序易读;递归增长了系统开销,延长了CPU执行时间,多占用了内存栈空间;非递归效率高,但是程序可读性差;递归与非递归选择大多数递归函数都能用非递归函数来代替。能用递推就用递推,普通情况比递归快,除非有问题不用递归做不出来。 7.6 函数递归调用 大连理工大学软件学院第41页第41页递归法/ n! recursive functionint Factorial ( int n ) if ( n = = 0 ) return 1 ; return n * Factorial ( n - 1 ) ;long fact ( int
17、m ) int i ; long sum = 1 ; for ( i = 1 ; i n时,m 与 n 最大公约数等于 n 和 m%n 最大公约数;当 n = 0时,m 和 n 最大公约数等于 m 。求最大公约数 7.6 函数递归调用 大连理工大学软件学院第43页第43页 /迭代法long g2(int a, int b) int t;while(b!=0)t=a%b;a=b;b=t;return a;/递归法long g1(int a, int b) if(a%b=0) return b; return g1(b, a%b); 求最大公约数 7.6 函数递归调用 大连理工大学软件学院第44页
18、第44页7.7 数组作为函数参数 数组元素和数组名都能够作为参数传递给函数数组元素作参数,按值传递方式传递给函数;数组名作参数,常按地址方式传递给函数。 数组名用于传递地址(即数组第一个元素地址); 把数组名作为参数传递到函数中,实参和形参共用同一段内存空间,可通过改变形参而改变实参。大连理工大学软件学院第45页第45页一、数组元素作参数(性质与简朴变量相同,值传递)#includevoid fun( int, int, int );void main( ) int i , a3 = 1, 2, 3 ; fun ( a0 , a1 , a2 ) ; for ( i = 0 ; i 3 ; i
19、+ ) printf(“%5d”, a i );void fun ( int a, int b, int c ) a+ ; b+ ; c+ ; printf(“%5d %5d %5d n”, a , b ,c) ;修改局部量传值参数7.7 数组作为函数参数大连理工大学软件学院第46页第46页a 0 x0065FDD012345678910 pan0065FDD00i0m10二、数组名作参数(传递地址)#include int sum ( int pa , int n ) int m = 0 , i ; for ( i = 0 ; i n ; i + ) m += pa i ; return m;void main(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025新一代公务员面试题及答案
- 2025昔阳公务员面试题及答案
- 铜掺杂改性ZnO纳米材料的制备及抗菌性能研究
- 2025年第六届全国国家版图知识竞赛试题题库(中小学组)附参考答案详解【模拟题】
- 基于注意力机制的语音脑电信号解码研究
- 2025年医疗资源区域合作与共享机制研究及政策建议报告
- 2025年康复医疗服务体系康复康复与康复康复服务商业模式创新分析预测策略研究报告
- 数字化教材在基础教育阶段的开发与应用2025年调研与分析报告
- 政策支持下的2025年医疗机构信息化建设与医疗信息化产业创新研究报告
- 2025年农业科技创新项目资金申请报告:精准施肥技术篇
- 村史范本、模板
- 自贸试验区片区重点发展产业列表
- 消防设备设施应急操作培训课件(PPT)
- 眼球的结构与功能
- 《社会主义制度在中国的确立》示范课教学设计【高中思想政治人教版必修1中国特色社会主义】
- 立方米卧式浓硫酸储罐设计
- 三乙胺安全标签
- GB/T 4490-2021织物芯输送带宽度和长度
- GB/T 17793-1999一般用途的加工铜及铜合金板带材外形尺寸及允许偏差
- ICU常见检查项目及课件
- 《月光下的中国》朗诵稿
评论
0/150
提交评论