整数除法

J0H*_*0HN 2 pseudocode

我面临以下面试问题.

考虑这个函数声明:

void quiz(int i)
{
    if (i > 1)
    {
        quiz(i / 2);
        quiz(i / 2);
    }
    writeOutput("*");
}
Run Code Online (Sandbox Code Playgroud)

函数调用打印了多少个星号quiz(5)

我的回答是:

具有整数除法结果类型的语言(Javascript,PHP等)是float - 七个星号.函数测验被调用:

  1. i = 5 - 一次,星号印刷.
  2. i = 2.5 - 两次,打印星号.
  3. i = 1.25 - 四次,打印星号.
  4. i = 0.625 - 八次,没有打印星号

分割结果类型名称为整数的语言(C/C++,C#,Java等) - 三个星号.函数测验被调用:

  1. i = 5 - 一次,星号印刷.
  2. i = 2 - 两次,打印星号.
  3. i = 1 - 四次,星号未打印.

问题语法类似于C/C++,Java,所以答案是三个

采访是a closed book exam- 在采访中我无法运行此代码并进行检查.面试官告诉我,我的回答并不完全正确(或者至少,他们没想到会这样).Hovewer,我在家里运行了这段代码(使用PHP,Javascript和C#),结果就像我描述的那样.

那么,是否有一些我不知道的警告或者我的答案比他们期望的更详细?

Pau*_*ams 5

当i <= 1时,也会调用writeOutput.


Dou*_*las 5

如果您将代码更改为:

void quiz(int i)
{
    if (i > 1)
    {
        quiz(i / 2);
        quiz(i / 2);
    }
    printf("* for %d\n", i);
}
Run Code Online (Sandbox Code Playgroud)

你会看到结果quiz(5)是:

* for 1
* for 1
* for 2
* for 1
* for 1
* for 2
* for 5
Run Code Online (Sandbox Code Playgroud)

所以,你得到了每个i的正确调用次数,你只是没有注意到writeOutput在if之外,而不在其中.