递归函数最总会结束,那么这个函数一定?
来源:互联网 发布:moderntimes软件 编辑:程序博客网 时间:2024/06/01 07:22
题目:递归函数最总会结束,那么这个函数一定____2____(不定项选择题)
1) 使用了局部变量
2) 有一个分支不调用自身
3)使用了全局变量或者使用了一个或多个变量
解析:
这是一道简单的选择题,但包含的内容并不算简单,而不定项选择更加大了难度。我一眼看去,自然就选择了2和3。
1显然不是,局部变量只在一次调用局部范围有效,出了这次调用的范围就无效了,它不能控制递归的结束。(这个选项是考查局部变量生命周期/有效范围的问题)需要注意的就是局部变量不是局部静态变量。
对于2,很自然了,如果没有一个分支不调用自身,递归就不会结束了。(这是在考查递归的定义)
对于3,这是最有迷惑性的,因为使用全局变量或使用一个或多个参数的确可以控制递归的结束,但是不是只有这两种方式呢?所以题目中指出了"一定"。答案是并不是只有这两种方式。
- 我们知道局部静态变量存放在堆中而不是栈中,所以它在程序生命周期内都是存在的,只是只有在函数内才能被访问,其内容是上次处理后的内容或是初始化后的内容,调用多次都同一个变量实例。所以局部静态变量是可以控制递归函数最终结束的。
在C语言中,可以用
static int a;
来定义,在Delphi中可以用
const a:integer;
来定义(注意编译器开关$J+)
这里会有很多人认为局部静态变量就是全局变量,这是错误的,全局变量应该是生命周期和有效作用域都有全局性,而局总静态变量只有生命周期是全局的,而作用域是只在函数体内有效。
- 可能通过异常来控制递归的结束。其实这种情况很常见,每个应用程序的缺省栈空间大小是不会太大的,很容易因为堆栈溢出而让递归函数终止。此外,还可以会发生其它的异常,比如内存空间不足、除零等等。这些异常都可以让递归函数终止。
- 我们一般所说的全局变量都是针对一个应用程序而言的,所以我们还可以利用BIOS或OS的一些数据或一些标准库的全局值来控制递归过程的终止。比如利用日期时间、利用库中的随机数等等。
- 我们还可以把一些数据写入到BIOS或OS的系统数据区,也可以把数据写入到一个文件中,以此来控制递归函数的终止。
- 还有......还没想到
呵呵,所以,正确答案是2,只有这一个。
- 递归函数最总会结束,那么这个函数一定?
- 递归函数最终会结束,那么这个函数一定?
- 递归函数最终会结束,那么这个函数一定?
- 递归函数最终会结束,那么这个函数一定?
- 递归函数最终会结束,那么这个函数一定?
- 递归函数最终会结束
- 递归函数最终会结束
- 这个递归函数中返回值的执行过程
- C#控制台基础 被线程执行的函数如果有参数的话,那么参数的类型一定是object
- 递归函数
- 递归函数
- 递归函数
- 递归函数
- 递归函数
- 递归函数
- 函数递归
- 递归函数
- 递归函数
- OraclePL/SQL面向对象之package
- 九度1023 EXCEL排序
- 让开发自动化: 用 Eclipse 插件提高代码质量
- Oracle笔记 九、PL/SQL 游标的使用
- Oracle笔记 八、PL/SQL跳转/判断/循环语句块
- 递归函数最总会结束,那么这个函数一定?
- 敏捷开发一千零一问系列之二十三: UI设计怎么做到敏捷呢?(兼谈对UI热的理解)(下)
- Menu 在IE6 ,IE7 中子菜单正常显示,在IE8中不显示解决方案
- P8700和T9600对比测试
- Oracle笔记 七、PL/SQL 异常处理
- Comparator和Comparable在排序中的应用
- Oracle笔记 六、PL/SQL简单语句块、变量定义
- Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间
- Oracle笔记 四、增删改、事务