- 1
- 0
- 约1.22万字
- 约 52页
- 2019-05-06 发布于广东
- 举报
【 3.4 带默认形参值的函数】 例 3-7 (续) 例 3-8 (续) cout a=a \t b=b \t c=c; coutendl; a=b; { int c; c=b; cout a=a \t b=b \t c=c; coutendl; } cout a=a \t b=b \t c=c; coutendl; } cout a=a \t b=b \t c=c; coutendl; return 0; } a=1 b=2 c=3 a=1 b=20 c=2.1 a=20 b=20 c=20 a=20 b=20 c=2.1 a=20 b=2 c=3 (续) 对应于不同作用域,声明的变量可分为 局部变量 全局变量 是指其作用域小于文件作用域的变量。如:函数的参数变量、在函数体中声明的变量。 是指其作用域是文件作用域的变量。从声明处开始,除了在声明有同名局部变量的块内,在整个程序文件中都是可以引用的。 全局变量的使用必须非常小心。一般很少使用全局变量。因为全局变量涉及到数据共享,无法对数据的访问权限进行有效的控制。 注 #includeiostream.h void swap(); int x(1),y(2); int main(void) { 例 3-11 全局变量 【 3.5.2 局部变量与全局变量】 Before swap: x=1 y=2 After swap: x=2 y=1 { cout Before swap: endl; cout x=x\t y=yendl; swap(); cout After swap: endl; cout x=x\t y=yendl; return 0; } void swap() { int temp; temp=x; x=y; y=temp; } 全局变量 例 3-11 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); } 直接递归 间接递归 注意:可用if语句来避免无终止的递归调用。 【 3.6 递归调用】 一个函数可以调用另一函数,如果被调用的函数就是调用者自身,或者被调用函数最终又反过来调用这个主调函数,就形成了一个函数直接或间接地调用自身的现象,这一现象就是函数的递归调用。 直接递归 间接递归 函数间接调用自身 函数直接调用自身 函数的递归调用的分类 具体地说递归的过程有两个阶段: ● 第1个阶段为“递推”。在这个阶段中,将原有问题逐步分解为与原有问题处理方法相同的更简单的问题,直至分解出来的问题结果已知。 ● 第2个阶段为“回归”。这个阶段与递推的过程相反,它从已知条件出发逐步求值,最终得出原有问题的结果。 例如: 求5! 递推的过程如下: 5!=5*4! 4!=4*3! 3!=3*2! 2!=2*1! 1!=1*0! 0!=1(已知) 回归的过程如下: 0!=1(已知) 1!=1*0!=1 2!=2*1!=2 3!=3*2!=6 4!=4*3!=24 5!=5*4!=120 【 3.6 递归调用】 例:有5个人坐在一起,问第5个人多少岁,他 说比第4个人大2岁,第4个人说比第3个人大 2岁,问第3个人又说比第2个人大2岁,第2 个人比第1个人大2岁,第1个人10岁。请问第 5个人多大? age(5) =age(4)+2 age(4) =age(3)+2 age(3) =age(2)+2 age(2) =age(1)+2 age(1) =10 age(2) =12 age(3) =14 age(4) =16 age(5) =18 int age(int n) {if (n==1) return 10; else return 2+age(n-1); } v
原创力文档

文档评论(0)