📜  算法|递归问题6

📅  最后修改于: 2021-06-28 22:09:55             🧑  作者: Mango

以下程序的输出?

#include
void print(int n)
{
    if (n > 4000)
        return;
    printf("%d ", n);
    print(2*n);
    printf("%d ", n);
}
  
int main()
{
    print(1000);
    getchar();
    return 0;
}

(A) 1000 2000 4000
(B) 1000 2000 4000 4000 2000 1000
(C) 1000 2000 4000 2000 1000
(D) 1000 2000 2000 1000答案: (B)
说明:第一次n = 1000
然后通过第一个printf函数打印1000,然后调用print(2 * 1000),然后再次通过printf函数打印2000,然后调用print(2 * 2000),并在下次调用print(4000 * 2)时打印40000。

在这里8000大于4000,条件变为true,并返回到函数(2 * 4000)。在这里n = 4000,然后4000将再次通过第二个printf打印。

类似地,在n = 2000之后,print(2 * 2000)然后将打印2000并返回到print(2 * 1000),这里n = 1000,因此通过第二个printf打印1000。

选项(B)是正确的。
这个问题的测验