- 1、本文档共92页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 例4-19:汉诺塔问题 有三根针A ,B,C。A针上有n个盘子,盘子大小不等,大的在下,小的在上,如图示。要求把这n个盘子从A针移到C针,在移动过程中可以借助B针,每次只允许移动一个盘子,且在移动过程中在三根针上都保持大盘在下,小盘在上。 A B C 将n个盘子从A针移到C针可以分解为下面三个步骤: 1)将A上n-1个盘子移到B针上(借助C针); 2)把A针上剩下的一个盘子移到C针上; 3)将n-1个盘子从B针移到C针上(借助A针); * * 递归并不节省存储器的开销,因为递归调用过程中必须在某个地方维护一个存储处理值的栈。 递归的执行速度并不快,但递归代码比较紧凑,并且比相应的非递归代码更易于编写与理解。 在描述树等递归定义的数据结构时,使用递归尤其方便。 * 4.6 局部变量和全局变量 一、局部变量 在函数内部定义的变量,仅在该函数内有效。 不同函数中可以使用相同名字的变量,互不干扰。 局部变量在定义时没有明确的初始化值。 在函数开始运行时,局部变量在栈区中被分配空间,函数退出时,局部变量随之消失。 形式参数也是局部变量。 例: void main( ) void func( ) { { int s; int s; …… …… } } * 二、全局变量 在任何函数之外定义的变量,也称为外部变量。 可以被本文件中其它函数所共用。 它的有效范围是从定义变量的位置开始一直到本源文件结束。 存放在内存的全局数据区。 由编译器建立,默认初始化为0。 int n=5; // 全局变量 void func( ) void main( ) { { int s; int m = n; n = s; …… …… } } * 说明 全局变量的作用是增加了函数之间数据联系的渠道。 若在一个函数中改变了全局变量的值,就能影响到其它函数。 不成文的规定:全局变量的第一个字母用大写表示。 不在特别必要时,尽量不要使用全局变量 全局变量在程序的全部执行过程中都占用存储单元。 降低了函数的通用性。若外部变量与其它文件的变量同名,移植时就会出现问题,降低了程序的可靠性和通用性。 降低程序的清晰性。 一般要求把C程序中的函数做成一个封闭体,除了可以通过“实参-形参”的渠道与外界发生联系外,没有其它渠道──移植性好,可读性强。 * 4.7 作用域与可见性 作用域又称作用范围,它指的是标识符的有效范围 可见性指的是标识符是否可以被引用。 一、作用域分类 函数原型作用域 是C 程序中最小的作用域 开始于函数原型声明的左括号,结束于函数原型声明的右括号。 double area ( double width, double length); * 块作用域——局部作用域 块是一对大括号括起来的一段程序—— 块语句 在块中声明的标识符,其作用域从声明处开始,一直到块结束的大括号为止。 具有块作用域的标识符称作局部标识符。 void fun( int y ) // y 的作用域从此开始 { int a,b; // a, b的作用域从此开始 if ( y0 ) { int x; // x 的作用域从此开始 x = a + b; …… } // x 的作用域到此结束 …… } // a, b, y 的作用域
文档评论(0)