Google关于递归的一道笔记题

原创 2012年03月22日 07:22:01

递归函数最终会结束,那么这个函数一定(google的一道笔试题)

题目如下:

递归函数最终会结束,那么这个函数一定(不定项选择):
1. 使用了局部变量 2. 有一个分支不调用自身
3. 使用了全局变量或者使用了一个或多个参数

这是一道简单的选择题,但包含的内容并不算简单,而不定项选择更加大了难度。我一眼看去,自然就选择了2和3。
1显然不是,局部变量只在一次调用局部范围有效,出了这次调用的范围就无效了,它不能控制递归的结束。(这个选项是考查局部变量生命周期/有效范围的问题)需要注意的就是局部变量不是局部静态变量。
对于2,很自然了,如果没有一个分支不调用自身,递归就不会结束了。(这是在考查递归的定义)
对于3,这是最有迷惑性的,因为使用全局变量或使用一个或多个参数的确可以控制递归的结束,但是不是只有这两种方式呢?所以题目中指出了"一定"。答案是并不是只有这两种方式。

  • 我们知道局部静态变量存放在堆中而不是栈中,所以它在程序生命周期内都是存在的,只是只有在函数内才能被访问,其内容是上次处理后的内容或是初始化后的内容,调用多次都同一个变量实例。所以局部静态变量是可以控制递归函数最终结束的。
    在C语言中,可以用
    static int a;
    来定义,在Delphi中可以用
    const a:integer;
    来定义(注意编译器开关$J+)
    这里会有很多人认为局部静态变量就是全局变量,这是错误的,全局变量应该是生命周期和有效作用域都有全局性,而局总静态变量只有生命周期是全局的,而作用域是只在函数体内有效。

  • 可能通过异常来控制递归的结束。其实这种情况很常见,每个应用程序的缺省栈空间大小是不会太大的,很容易因为堆栈溢出而让递归函数终止。此外,还可以会发生其它的异常,比如内存空间不足、除零等等。这些异常都可以让递归函数终止。
  • 我们一般所说的全局变量都是针对一个应用程序而言的,所以我们还可以利用BIOS或OS的一些数据或一些标准库的全局值来控制递归过程的终止。比如利用日期时间、利用库中的随机数等等。
  • 我们还可以把一些数据写入到BIOS或OS的系统数据区,也可以把数据写入到一个文件中,以此来控制递归函数的终止。
  • 还有......还没想到

呵呵,所以,正确答案是2,只有这一个。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

从一道腾讯算法题到一种递归形式

算法题目: 12个高矮不同的人排两行,一行六人,在保证每行从左到右依次增高,每列从前到后依次增高的前提下,一共有多少种排法? 思路: 我们用数组来表示这两排人: 假设高矮不同的12个人...

每天一道算法题(38)——二叉树的非递归遍历

#include #include "stack" using namespace std; struct node{ char c; node* left; node *right; boo...

一道 Google 竞赛题的解法

  • 2007年07月12日 13:47
  • 55KB
  • 下载

一道 Google 竞赛题的解法

  • 2008年01月23日 23:42
  • 66KB
  • 下载

一道考递归的题目

题目: 输入1:输出:1; 输入2 :输出:222   212   222; 输入3:输出:33333   32223   32123   32223   33333 答案 public s...

一道TCL的笔试题---递归

在下面这个程序片段中的划线处填上适当的表达式,使之逆序输出数组元素。------------------------------------------------------------------...

一道递归思想的排列组合题目

题目原题:任意数字序列“12345678”之类,输出它们所有的排列组合这道题目对于学习递归还是挺不错的,可以借鉴一下 要注意的是: list.remove() 删掉链表的第一项,并返回这个对象(...
  • gsycwh
  • gsycwh
  • 2016年08月23日 10:39
  • 2670

用递归解决蓝桥杯的一道排列问题

题目大概是这样的:有七对数,{1,2,3,4,5,6,7},利用这七对数排列成一个14位数,要求是每对数中间相隔的位数是这一对数的值,如34563,一对3中间隔着三个数,其他类似,举一个用例25623...

google的一道面试题

今天下午快吃饭的时候看到了一道面试题,仔细分析了一下,想与大家分享一下,这是我的拙见,如果有错误或不理解的地方请留言交流。 村子里有100对夫妻,其中每个丈夫都瞒着自己的妻子偷情。。。村里的每个...
  • sun_168
  • sun_168
  • 2012年07月14日 18:27
  • 2304

Google的一道面试题

http://blog.csdn.net/jiaomeng/archive/2006/12/08/1435226.aspx 这几天有一道Google的面试题在论坛炒得很火,题目如下:“有一个100层...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Google关于递归的一道笔记题
举报原因:
原因补充:

(最多只允许输入30个字)