c - 递归函数的增长顺序

标签 c recursion time-complexity

以下问题是在 2001 年 GRE 计算机科学考试中提出的。

Q-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)指数(在其答案中提到)。但是,我不知道解决这个问题的确切方法。

有人能解决上述递归关系吗?您有任何替代方法吗?

请分享您的观点。

最佳答案

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

关于c - 递归函数的增长顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15950084/

相关文章:

java - 使用 Integer[] 与 int[]

c++ - 如何提高该模式所需的模板递归深度?

time-complexity - 理解时间复杂度 : iterative algorithm

PHP 数组 - 删除重复项(时间复杂度)

c - 一次一密中两个密文的异或信息给我什么?

c++ - 适用于 Windows Media Foundation 的 Visual Studio

c++ - 递归到迭代保留变量和调用顺序

java - 如何减少查找数字阶乘的最后一个非零数字的运行时间?

c - 设置 env 后 scons 仍然失败

c - C语言中,如何用指针计算一个字符串中有多少个元音字母?