Algorithm 以下递归算法的时间复杂度是多少?
以下递归算法的复杂度是多少?Algorithm 以下递归算法的时间复杂度是多少?,algorithm,time-complexity,master-theorem,Algorithm,Time Complexity,Master Theorem,以下递归算法的复杂度是多少? void rec(n){ 如果(n上述程序的时间复杂度为O(2^k),其中k是递归深度。 这里,2源于这样一个事实,即在每个递归调用中,我们将调用另外两个递归调用。现在,让我们分析递归的最深深度(k) 在上图中,递归路径在每一步中除以2将需要更长的时间才能达到小于1的值(这是基本情况)因此,它将是递归的最深深度。因为,每次我们将n除以2。要达到1以下需要日志步骤。尽管我们也将n除以3。将n除以2将花费更长的时间,因此,它将作为递归的决定因素递归的最深深度。有关详
void rec(n){
如果(n上述程序的时间复杂度为O(2^k)
,其中k是递归深度。
这里,2
源于这样一个事实,即在每个递归调用中,我们将调用另外两个递归调用。现在,让我们分析递归的最深深度(k
)
在上图中,递归路径在每一步中除以2将需要更长的时间才能达到小于1的值(这是基本情况)因此,它将是递归的最深深度。因为,每次我们将n
除以2
。要达到1
以下需要日志步骤。尽管我们也将n
除以3
。将n
除以2
将花费更长的时间,因此,它将作为递归的决定因素递归的最深深度。有关详细信息:
在1st
调用中,我们将n减少n/2。
在2nd
调用中,我们将n减少n/2
(n/2)/2=n/4=n/2^2。
因此,在Kth
步骤中,我们减少了n
作者:n/2^k=1.
因此,n=2^k.
在两侧取原木底座2
log2n=log2(2^k)
log2 n=k log2(2)
log2n=k*1[因为log2(2)是1]
因此,在递归的最深处,我们需要k=log(n)
步骤才能达到n=1,再多一步才能达到n的无穷大?n怎么可能变成负数或零?@StrangerintheQ:如果是整数,很容易(1/2
在我知道的大多数语言中都会产生零)。如果是浮点,则需要更多的步骤;如果是双精度,则需要更长的时间(例如,1/1e1000
通常为零)。你遇到麻烦的唯一方法是,如果你用带有弹性整数的有理数作为命名符和分母(如Ruby的rational
)。
void rec(n){
if(n<=0)
return;
else
rec(n/3)+rec(n/2);
}