📜  算法|递归问题8

📅  最后修改于: 2021-07-02 16:33:26             🧑  作者: Mango

预测以下程序的输出

#include 
int f(int n)
{
    if(n <= 1)
        return 1;
    if(n%2 == 0)
        return f(n/2);
    return f(n/2) + f(n/2+1);
}
  
  
int main()
{
    printf("%d", f(11));
    return 0;
}

(A)堆栈溢出
(B) 3
(C) 4
(D) 5答案: (D)
说明:在连续递归中,F(11)将分解为
F(5)+ F(6)-> F(2)+ F(3)+ F(3)
-> F(1)+ 2 * [F(1)+ F(2)]-> 1 + 2 * [1 + F(1)]
-> 1 + 2 *(1 +1)-> 5。

因此,选项D是正确的答案,即5。
这个问题的测验