类似的递归情况,不同的运行时间?

时间:2014-01-24 04:06:00

标签: java runtime

第一个的运行时间是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 个答案:

答案 0 :(得分:1)

第一个函数比第二个函数更快地减少nhappyn除以2,直到它低于100. silly 减去 2直到它低于10.

happy是O(log n),因为它需要log_2(n)步,直到它低于100,然后最多50步才能低于1.

silly是O(n),因为它需要n / 2步才能达到100以下,然后最多5步才能达到1以下。