C语言函数的嵌套调用和递归调用.pptx
《C语言函数的嵌套调用和递归调用.pptx》由会员分享,可在线阅读,更多相关《C语言函数的嵌套调用和递归调用.pptx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、5.4.2 函数的递归调用(函数的递归调用(嵌套调用的特例)概念:函数直接或间接地自我调用称为递归函数。int fun1(int x)z=fun1(y);int fun1(int x)int fun2(int t)z=fun2(y);c=fun1(a);直接引用自身间接引用自身递归在没有控制条件的情况下是无穷的递归。#includevoid main(void)printf(*n);main();只有通过控制条件,使递归调用终止,才能应用。#includevoid main(void)char ch;printf(*n);ch=getchar();if(ch!=9)main();第1页/共21
2、页递归举例:求递归举例:求 n!n!=1 n=0或n=1n(n-1)!n1f(n)=1 n=0或n=1nf(n-1)n1#include long lfac(long);void main(void)long i,x;scanf(%ld,&i);x=lfac(i);printf(n%ld,x);long lfac(long n)if(n=0|n=1)return 1;else return(n*lfac(n-1);lfac(4)4*lfac(3)3*lfac(2)2*flac(1)2*13*2*14*3*2*1递推回归=n(n-1)(n-2)321=n(n-1)!第2页/共21页 变量的作用域
3、和存储类型变量的作用域和存储类型变量生存期:变量占用内存单元(活着)的时间。内存中供用户使用的存储空间:程序区:存放程序代码。数据区:存放数据,分为动态存储区和静态存储区。变量的生存期和作用域 C语言中,定义变量应包含三个内容:数据类型:变量占用内存空间的大小。如:int,float,char。作用域:变量在程序中的有效区域。存储类型:变量在内存中的存储方式。存储方式不同,变量占用内存时间不同。静态存储区:静态存储区:定义变量定义变量(程序编译程序编译)时就分配内存单元,时就分配内存单元,直到程序结束。生存期为整个程序运行期。直到程序结束。生存期为整个程序运行期。动态存储区:使用时才分配内存单
4、元,使用完毕,立即释放。生存期为函数调用期。第3页/共21页变量的作用域:变量在程序中的可使用范围(有效性)。1.局部变量 定义在函数内部的变量。也称为内部变量。放在动态区中,只有调用它的函数才能使用它。调用时才分配内存单元,调用结束,内存即刻被释放,作用域:仅限于函数内部或复合语句内。生存期:函数调用期间。作用域可以是一个函数或一个复合语句,取决于定义变量的位置,可分为局部变量和全局变量。注意:不同的函数或复合语句中可以使用相同的变量名。因为它们作用域不同,所以它们互不干预。即:同名,不同作用域的变量是不同的变量。第4页/共21页例:(见p137 例)#include void func()
5、;main()int y=10;printf(“1:y=%dn”,y);func();printf(“2:y=%dn”,y);void func()int x=5;int x=3;int x=1;printf(“x=%dn”,x);printf(“x=%dn”,x);printf(“x=%dn”,x);运行结果:1:y=10 x=1 x=3 x=52:y=10第5页/共21页2.全局变量全局变量 定义在函数之外的变量。也称为外部变量。放在静态区中。作用域:从定义直到文件结束。生存期:在程序的整个执行过程中。#include void add(void);int a,b,c;void main(
6、void)scanf(“%d,%d”,&a,&b);add();printf(“%d”,c);void add(void)c=a+b;外部变量作用域注意:1.任何函数对外部变量的修改都会影响其他函数对它的引用。2.当函数中出现和全局变量同名的局部变量时,局部变量优先。第6页/共21页 变量的存储类型变量的存储类型 变量的存储类型有四种:自动类型 auto 寄存器类型 register 静态类型 static 外部类型 extern完整的变量说明格式:存储类型 数据类型 变量名表;确定变量在内存中的表示方法。确定变量的生存期和作用域。该项省略表示auto存储类型。变量的作用域不同,本质上是变量的
7、存储类型不同:静态存储:程序编译时就分配内存单元,直到程序结束。动态存储:使用时才分配内存单元,使用完毕,立即释放。动态存储方式 静态存储方式 第7页/共21页1、自动类型自动类型 auto(C 默认的存储方式)定义在复合语句的开始处。块内生存块内有效。#include void main(void)auto int a,b;scanf(“%d,%d”,&a,&b);if(ba)int T;T=a;a=b;b=T;printf(“Max=%d”,a);ab的作用域T的作用域生存期:执行到复合语句时建立内存变量。执行出复合语句后变量消亡。T2、寄存器类型 register 作用域和生存期与aut
8、o相同,差别:如果CPU内部寄存器空闲,则使用寄存器作为变量的存储单元,以提高速度。主要用于循环变量。(见p140 例5.16)第8页/共21页3、静态类型静态类型 static(局部全局)(局部全局)作用域:在定义的复合语句内引用,出了复合语句不可见。生存期:从定义直到程序结束。执行出 时,原值并不消失,下次调用时变量中仍保留上次调用结束时的值。void row(void);void main(void)int b;for(b=1;b=9;b+)row();void row(void)int a=1;int b;for(b=1;b=9;b+)printf(%3d,a*b);printf(n)
9、;a+;static说明a为静态局部变量生存期从第一次调用到程序结束。a的作用域 静态局部变量特点:1.系统自动为静态局部变量赋初值 0。2.作用域与局部变量相同。3.生存期与局部变量不同。第9页/共21页 静态全局变量静态全局变量全局变量和静态全局变量都是静态存储方式,区别:全局变量的作用域为整个源程序,静态全局变量的作用域为定义该变量的源文件;1.若一个程序由多个“.c”文件组成,全局变量在各个源文件中都有效,静态全局变量则仅在定义它的源文件中有效。全局变量前加上存储类型说明static,即构成静态全局变量。static a=3;void main(void)注意static位置:静态局部
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 函数 嵌套 调用 递归
限制150内