递归函数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 ++的复杂性的主要内容,如果未能解决你的问题,请参考以下文章