我面临以下面试问题。
考虑以下函数声明:
无效测验(Int i) { if (i > 1) {测验(I/ 2);测验(I/ 2);} writeOutput("*");}
函数quiz(5)打印了多少个星号?
我的回答是:
语言(Javascript,PHP等)与整数除法结果类型为浮点数-7个星号。函数测试被调用:
用
。
语言(C/C++、C#、Java等)哪个除法结果类型名称是整数-三个星号。函数测试被调用:
一次,星号printed.
问题语法类似于C/C++,Java,所以答案是三个
面试是a closed book exam --在面试期间,我无法运行这段代码并检查它。面试官告诉我,我的回答不是绝对正确的(或者至少,他们没想到会是这样的)。Hovewer,我已经在家里运行了这段代码(使用PHP、Javascript和C#),结果正如我所描述的。
那么,我是否遗漏了一些警告,或者我的回答比他们预期的要详细?
发布于 2011-08-29 18:24:59
如果将代码更改为:
void quiz(int i)
{
if (i > 1)
{
quiz(i / 2);
quiz(i / 2);
}
printf("* for %d\n", i);
}您将看到quiz(5)的结果是:
* for 1
* for 1
* for 2
* for 1
* for 1
* for 2
* for 5因此,您得到了每个i正确的调用数,您只是没有注意到writeOutput在if之外,而不是在其中。
发布于 2011-08-29 18:19:39
当我也调用writeOutput 1时,<=也会被调用。
发布于 2011-08-29 18:23:03
如果函数以int作为参数,它(在通常情况下)将不会将2.5作为参数。当然,除非有人说#define double int,但在这种情况下,没有什么是可靠的。
所以你的答案应该是你答案的第二部分。
https://stackoverflow.com/questions/7234057
复制相似问题