- 1、本文档共67页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.6 函数的嵌套调用和递归调用 函数的递归调用:函数直接或间接的调用自身叫函数的递归调用 f( ) 调f 调f2 调f1 f1( ) f2( ) 说明 每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出 int f(int x) { int y,z; …… z=f(y); ……. return(2*z); } int f1(int x) { int y,z; …… z=f2(y); ……. return(2*z); } int f2(int t) { int a,c; …… c=f1(a); ……. return(3+c); } 构成递归的条件 (1)具备递归结束条件及结束时的值(递归出口); (2)能用递归形式表示,并且递归向终止条件发展(递归体); 【例】利用递归实现将一个数据各位上的数字逆序输出,如将12345逆序输出54321。 #include stdio.h void reverse(int n) { if(n0) { printf(%d,n%10); reverse(n/10); } } main( ) { int x; scanf(%d,x); reverse(x); } 例 求n的阶乘 #include stdio.h int factor(int n) { if (n==0||n==1) return (1); else return (n*factor(n-1)); } void main() { int x,factor(); scanf(%d,x); printf(%d!=%ld\n,x,factor(x)); } 回 推 过 程 递 推 过 程 factor(4) =4*factor(3) =24 factor(2) =2*factor(1)=2 factor(3) =3*factor(2)=6 factor(5) =5*factor(4) factor(4) =4*factor(3) factor(1)=1 factor(2) =2*factor(1) factor(3) =3*factor(2) factor(5) =5*factor(4) =120 n=5时n!递归算法执行过程 int factor(int n) { if (n==0||n==1) return (1); else return (n*factor(n-1)); } * * * 变量在某一时刻存在,则这时属变量的“生存期”(从给变量分配内存至所分配内存被系统收回的时间间隔 /* 子函数max_value() */ int max_value(int array[M][N]) // 形参为二维数组名array { int i,j,max; max=array[0][0]; for (i=0;iM;i++) for (j=0;jN;j++) if (maxarray[i][j]) max=array[i][j]; return (max); // 返回值为二维数组各元素的最大值 } 本例max_value()用二维数组名array作形参,在参数传递时,该数组名被自动转换成二维数组的行指针并复制实参指针ph中的地址值,从而指向main()函数中的数组scr。所以,main()中的scr[i][j]与max_value()中的array[i][j]表示的是同一存储空间。 max_value(int array[4][5]) 或 max_value(int array[M][N]) max_value(int array[][5]) 或 max_value(int array[][N]) max_value(int (*array)[5]) 或 max_value(int (*array)[N]) 参
文档评论(0)