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

标签 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); 
} 

谁能解释一下为什么吗?我真的很感激!

最佳答案

第一个函数减少 n比第二个快得多。 happy划分n 2 直到低于 100。silly 减去 2,直到低于 10。

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

silly是 O(n),因为需要 n/2 步才能低于 100,那么最多需要 5 步才能低于 1。

关于java - 类似的递归情况,不同的运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21324233/

相关文章:

java - 访问 BerkleyDB 复制日志

objective-c - Objective-C Method Swizzling 是否会影响其他进程中的代码?

java - 从命令行运行 Java 程序

java - 如何检测网页字符集并获取页面内容?

algorithm - 简化 T(n) 运行时

c - 如何在C结构中打印变量

linux - 为什么运行时 undefined symbol 会通过将/usr/lib 添加到ld.so.conf 来修复?

java - 删除运行时生成的 XSL 输出文件

java - 安卓网络驱动程序。 XMLHttpRequest 无法加载 'URL' 。 Access-Control-Allow-Origin 不允许 Origin 'URL'。在空 :1

java - 如何按升序和降序对带分隔符的字符串列表进行排序