📜  算法|递归问题7

📅  最后修改于: 2021-06-28 23:15:42             🧑  作者: Mango

以下功能有什么函数?

int fun(unsigned int n)
{
    if (n == 0 || n == 1)
        return n;
  
    if (n%3 != 0)
        return 0;
  
    return fun(n/3);
}

(A)当n为3的倍数时返回1,否则返回0
(B)当n为3的幂时返回1,否则返回0
(C)当n为3的倍数时返回0,否则返回1
(D)当n为3的幂时返回0,否则返回1答案: (B)
说明:让我们以n = 27的3次方为例进行求解。
第一次,如果条件为假,因为n不等于0也不等于1,则27%3 = 0。
在这里,如果条件为假,因为它等于0,所以再次出现。
然后将调用fun(27/3)。

第二次,如果条件为假,因为n不等于0也不等于1,则9%3 = 0。
如果条件为假(因为它等于0),则在此处再次出现。

然后调用fun(9/3),如果条件为假,则第三次调用,因为n既不等于0也不等于1,则3%3 = 0。
如果条件为假(因为它等于0),则在此处再次出现。

然后,如果条件为真,则fun(3/3)将在此处调用n == 1并返回n即1。

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