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,只有这一个。

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

树状数组BITLA 4329

我去,数组最大值 跟 数据最大值 没搞清楚,WA了好多次都看不出来错在哪。这种错误一旦犯了,小数据根本看不不出来。。 #include #include #include #include...
  • u011526463
  • u011526463
  • 2013年10月02日 11:43
  • 391

LA4329 乒乓 树状数组

题意:训练指南上的例题。大致求a
  • u010454438
  • u010454438
  • 2014年09月06日 17:06
  • 366

LA4328 Ping Pong (树状数组)

题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13895 题意:一条大街上住着n个乒乓求爱好者,经常组织比赛切磋技术。每...
  • w20810
  • w20810
  • 2015年07月07日 19:09
  • 363

LA4329(树状数组)

#include #include #include using namespace std; const int maxn=100005; int a[maxn],c[maxn],mini1[max...
  • shiqining888
  • shiqining888
  • 2013年12月14日 23:32
  • 366

树状数组uva1428

思路同poj1990,不多说。 代码如下: #include #include #include #include using namespace std; typedef long long L...
  • u010660276
  • u010660276
  • 2014年02月19日 20:11
  • 377

POJ 3928 Ping pong(树状数组基础题)

表示期末考试终于渡过了
  • gaoxiang36999
  • gaoxiang36999
  • 2014年07月24日 00:27
  • 367

ZOJ2492 ping pong(树状数组BIT)

C. Ping pong Time Limit: 1000msMemory Limit: 32768KB 64-bit integer IO format: %lld Java class...
  • zyd8888102
  • zyd8888102
  • 2016年04月30日 17:22
  • 190

poj3928 Ping pong(树状数组)

http://poj.org/problem?id=3928 题意:有n个乒乓球选手,住在一条直线上,从左到右依次输入。每个选手有一个技术等级值。他们想打比赛,就要找裁判,为了省时和公正,选裁判的条...
  • Flynn_curry
  • Flynn_curry
  • 2017年03月02日 21:25
  • 178

由一道腾讯面试题引发的关于递归函数使用的各种情况总结

一直有一个感受就是,当我们在某些问题抽象的定义解答时候感到疑惑是,不妨看一下具体问题的解答,更加有助于我们理解问题。首先看一下腾讯的一道招聘的测试题。        1、面试题是一道程序编程题,要求...
  • wang_dong001
  • wang_dong001
  • 2015年09月08日 10:47
  • 862

LA 4329/uvalive 4329 (树状数组)

题目大意:一条街上住着很多喜欢打乒乓球的人,他们每个人的水平按照技能值排列。他们经常举办比赛,三个人(包含裁判),他们举办比赛的条件是需要裁判需要住在他们两个人中间而且裁判的技能值也要在他们俩中间。问...
  • Tsaryu
  • Tsaryu
  • 2016年11月28日 23:58
  • 441
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Google关于递归的一道笔记题
举报原因:
原因补充:

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