大写符号中以下语句的运行时间是多少?

时间:2015-02-11 13:53:22

标签: algorithm if-statement big-o

public int foo ( int x , int k ) {
     if ( x <= k )
         return 1;
     else
         return foo ( x / k , k ) + 1;
}

根据我的理解,这个的运行时应该等于条件的运行时+更大的if / else语句的运行时。

但是,我无法确定语句的正确运行时间&#34;返回foo(x / k,k)+ 1&#34;。这会不变吗? x和k的增加似乎不会对运行时产生影响,因为它们之间的比率对结果很重要。

任何清晰度都会非常感激。谢谢!

1 个答案:

答案 0 :(得分:2)

递归调用每次将x除以k,因此k&gt; = 2的复杂度为O(logk(x)) - 基数为k的x的对数。

对于k < 2它可能不会终止(实际上,它将耗尽内存或除以零)。