递归函数c ++的复杂性

Posted

技术标签:

【中文标题】递归函数c ++的复杂性【英文标题】:Complexity of a recursive function c++ 【发布时间】:2020-06-10 10:47:21 【问题描述】:

*我正在尝试计算以下函数的复杂度 Big-Theta-Notation: 变量 i 是常数 == 3 *

void g(int i, int n) 
    if (i>0) 
        for (int j=n+10; j>0; j-=5) 
            g(i-2, n);
        
    

因为是递归函数,我想应该用Master Theorem来计算,但实际上没有n的除法。我会非常感激任何帮助!

【问题讨论】:

不一定是递归的。您显示的函数g() 接受一个参数并调用另一个(重载)g(),它接受两个参数。除非两个参数 g() 调用一个参数 g(),否则不会进行递归。而且由于您没有描述两个参数g(),因此无法估计复杂性。 【参考方案1】:

递归关系是T(i, n) = (n+10)T(i-2, n)/5。

奇数和偶数i 的项都是乘法因子 (n+10)/5 的几何级数。这解决了 T(i, n) = O((n/5)^(i/2)) 或 O(sqrt(n/5)^i) 如果您愿意。

【讨论】:

以上是关于递归函数c ++的复杂性的主要内容,如果未能解决你的问题,请参考以下文章

c语言递归函数

C语言 编写递归函数

main函数可否进行递归调用

c语言怎么用递归调用函数的方法求n的阶乘?

C语言 求把一个递归函数 改成一个普通的函数 需要用到while loop

C语言编程:用函数递归法求Fibonacci数列的前n项·