递归函数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语言多层递归函数(最烧脑的一种递归)

计算图中路径的递归函数的复杂性

C语言中的函数要点(下)

c语言递归函数