2014-01-24 27 views
0

第一个运行时间是O(log n),我知道这是大多数递归情况下的运行时间。类似的递归情况,不同的运行时间?

int happy (int n, int m) { 
    if (n < 10) return n; 
    else if (n < 100) 
     return happy (n - 2, m); 
    else 
     return happy (n/2, m); 
} 

然而,第二递归的情况下的运行时间为O(n)

int silly(int n, int m) { 
    if (n < 1) return m; 
    else if (n < 10) 
    return silly(n/2, m); 
    else 
    return silly(n - 2, m); 
} 

任何人都可以解释,为什么?我真的很感激!

回答

1

第一个函数比第二个函数减少了nhappy除以n 2,直到它得到低于100。silly减去 2,直到它得到低于10

happy是O(log n)的,因为它需要log_2(n)的步骤,直到它得到下低于100,则在获得最多50个步骤如下1.

silly是O(n),因为它需要N/2步骤获得低于100,则最多5个步骤来获得低于1

+0

谢谢您的回答。你有什么策略来计算运行时间吗? – user2913922

+0

这不是一个简单的主题。我们的目标是试着弄清楚,给定'n'输入或者输入大小'n',算法执行多少有意义/重要_操作_(模糊定义)以完成。在这两个函数的情况下,我计算了函数调用自己的次数,直到达到基本大小写。 – mojo

相关问题