递归函数的增长顺序

时间:2013-04-11 13:28:45

标签: c recursion time-complexity

以下问题,在 GRE计算机科学测试2001 中提出。

问题67:考虑以下 C代码

int f(int x) {
    if(x<1) {
        return 1;
    } else {
        return f(x-1)+g(x);
    }
}

int g(int x) {
    if(x<2) {
        return 1;
    } else {
        return f(x-1)+g(x/2);
    }   
}


以下哪一项最能说明 f(x)增长 x 的函数?

(A)对数 (B)线性 (C)二次 (D)立方 (E)指数

顺便说一句,正确答案(E)指数(在答案中提及)。但是,我不知道解决这个问题的确切方法。

任何人都可以解决重复关系吗?你有替代方法吗?

请分享您的观点。

1 个答案:

答案 0 :(得分:1)

我认为这可以简化为 f(x) >= f(x-1)+f(x-1) for x>1, 因为g(x) = f(x-1)+g(x/2) >= f(x-1) for x>1。 第一个不等式只是f(x) >= 2*f(x-1),从这里可以很容易地推导出f(x) >= 2^x*f(1)f的值每次x增长至少加倍1。)