递归函数最终会结束,那么这个函数一定?
2012-09-21 09:52
761 查看
题目如下:
递归函数最终会结束,那么这个函数一定(不定项选择):
1. 使用了局部变量 2. 有一个分支不调用自身
3. 使用了全局变量或者使用了一个或多个参数
这是一道简单的选择题,但包含的内容并不算简单,而不定项选择更加大了难度。我一眼看去,自然就选择了2和3。
1显然不是,局部变量只在一次调用局部范围有效,出了这次调用的范围就无效了,它不能控制递归的结束。(这个选项是考查局部变量生命周期/有效范围的问题)需要注意的就是局部变量不是局部静态变量。
对于2,很自然了,如果没有一个分支不调用自身,递归就不会结束了。(这是在考查递归的定义)
对于3,这是最有迷惑性的,因为使用全局变量或使用一个或多个参数的确可以控制递归的结束,但是不是只有这两种方式呢?所以题目中指出了"一定"。答案是并不是只有这两种方式。
我们知道局部静态变量存放在堆中而不是栈中,所以它在程序生命周期内都是存在的,只是只有在函数内才能被访问,其内容是上次处理后的内容或是初始化后的内容,调用多次都同一个变量实例。所以局部静态变量是可以控制递归函数最终结束的。
在C语言中,可以用
static int a;
来定义,在Delphi中可以用
const a:integer;
来定义(注意编译器开关$J+)
这里会有很多人认为局部静态变量就是全局变量,这是错误的,全局变量应该是生命周期和有效作用域都有全局性,而局总静态变量只有生命周期是全局的,而作用域是只在函数体内有效。
可能通过异常来控制递归的结束。其实这种情况很常见,每个应用程序的缺省栈空间大小是不会太大的,很容易因为堆栈溢出而让递归函数终止。此外,还可以会发生其它的异常,比如内存空间不足、除零等等。这些异常都可以让递归函数终止。
我们一般所说的全局变量都是针对一个应用程序而言的,所以我们还可以利用BIOS或OS的一些数据或一些标准库的全局值来控制递归过程的终止。比如利用日期时间、利用库中的随机数等等。
我们还可以把一些数据写入到BIOS或OS的系统数据区,也可以把数据写入到一个文件中,以此来控制递归函数的终止。
还有......还没想到
呵呵,所以,正确答案是2,只有这一个。
以上终止条件,我只想到前两个,后面的是综合了其他人的"创意":D
转自:http://blog.sina.com.cn/s/blog_632fdaf60100k58l.html
递归函数最终会结束,那么这个函数一定(不定项选择):
1. 使用了局部变量 2. 有一个分支不调用自身
3. 使用了全局变量或者使用了一个或多个参数
这是一道简单的选择题,但包含的内容并不算简单,而不定项选择更加大了难度。我一眼看去,自然就选择了2和3。
1显然不是,局部变量只在一次调用局部范围有效,出了这次调用的范围就无效了,它不能控制递归的结束。(这个选项是考查局部变量生命周期/有效范围的问题)需要注意的就是局部变量不是局部静态变量。
对于2,很自然了,如果没有一个分支不调用自身,递归就不会结束了。(这是在考查递归的定义)
对于3,这是最有迷惑性的,因为使用全局变量或使用一个或多个参数的确可以控制递归的结束,但是不是只有这两种方式呢?所以题目中指出了"一定"。答案是并不是只有这两种方式。
我们知道局部静态变量存放在堆中而不是栈中,所以它在程序生命周期内都是存在的,只是只有在函数内才能被访问,其内容是上次处理后的内容或是初始化后的内容,调用多次都同一个变量实例。所以局部静态变量是可以控制递归函数最终结束的。
在C语言中,可以用
static int a;
来定义,在Delphi中可以用
const a:integer;
来定义(注意编译器开关$J+)
这里会有很多人认为局部静态变量就是全局变量,这是错误的,全局变量应该是生命周期和有效作用域都有全局性,而局总静态变量只有生命周期是全局的,而作用域是只在函数体内有效。
可能通过异常来控制递归的结束。其实这种情况很常见,每个应用程序的缺省栈空间大小是不会太大的,很容易因为堆栈溢出而让递归函数终止。此外,还可以会发生其它的异常,比如内存空间不足、除零等等。这些异常都可以让递归函数终止。
我们一般所说的全局变量都是针对一个应用程序而言的,所以我们还可以利用BIOS或OS的一些数据或一些标准库的全局值来控制递归过程的终止。比如利用日期时间、利用库中的随机数等等。
我们还可以把一些数据写入到BIOS或OS的系统数据区,也可以把数据写入到一个文件中,以此来控制递归函数的终止。
还有......还没想到
呵呵,所以,正确答案是2,只有这一个。
以上终止条件,我只想到前两个,后面的是综合了其他人的"创意":D
转自:http://blog.sina.com.cn/s/blog_632fdaf60100k58l.html
相关文章推荐
- 递归函数最终会结束,那么这个函数一定(不定项选择)
- 递归函数最终会结束,那么这个函数一定?
- 递归函数最终会结束,那么这个函数一定?
- 递归函数最终会结束,那么这个函数一定?
- 递归函数最总会结束,那么这个函数一定?
- 递归函数一定要弄清楚这个函数是做什么用的,基于什么条件返回什么结果!
- 这个夏天所有的疯狂都在今晚结束,一定!!!
- 构造函数一定不要加void等修饰符,否则这个函数不会被当做构造函数去使用,默认的构造函数是没有参数的。
- 求解,多线程时,线程池中一个线程内部代码抛出异常,那么这个线程能正常结束么?
- 编写一个函数,从标准输入读取一列整数,把这些值存储于一个动态分配的数组中并返回这个数组。函数通过观察EOF判断输入列表是否结束。数组的第一个数是数组包含的值的个数,他的后面就是这些整数值。
- 编写一个函数,从标准输入读取一列整数, 把这些值存储在一个动态分配的数组中并返回这个数组。 函数通过观察EOF判断输入列表是否结束。 数组的第一个数是数组包含的值的个数, 它的后面就是这些整数值。
- 如果一个函数中有局部对象的存在, 那么它就一定会存在 C++ 的异常处理机制
- 如果想用一个事件控制多个线程结束,那么这个事件要手动复位
- 递归函数最终会结束
- 递归函数最终会结束
- feof()函数读取文件和EOF结束符标志问题
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- 看懂这个例子中信号相关的所有函数是必要的,很必要!特别是例子中的
- C语言学习-函数和递归函数
- (转)Linux下使用system()函数一定要谨慎