java - 递归算法的运行时复杂性

标签 java recursion big-o time-complexity tailrecursion-modulo-cons

我到处搜索,似乎找不到很多与运行时复杂性、递归和 Java 相关的 Material 。

我目前正在我的算法课上学习运行时复杂性和大 O 表示法,但我在分析递归算法时遇到了困难。

private String toStringRec(DNode d)
{
   if (d == trailer)
      return "";
   else
      return d.getElement() + toStringRec(d.getNext());
}

这是一种递归方法,它将简单地遍历双向链表并打印出元素。

我唯一能想到的是它的运行时复杂度为 O(n),因为递归方法调用的次数将取决于 DList 中的节点数,但我仍然不知道对这个答案感到满意。

我不确定我是否应该考虑添加 dd.getNext()

或者我完全偏离了轨道并且运行时复杂度是恒定的,因为它所做的只是从 DList 中的 DNodes 检索元素?

最佳答案

乍一看,这像是tail recursion modulo cons的经典案例,尾调用的概括。相当于一个有迭代次数的循环。

然而,事情并没有那么简单:这里棘手的事情是将 d.getElement() 添加到不断增长的字符串中:这本身就是一个线性操作, 并重复 N 次。因此,您的函数的复杂度为 O(N^2)

关于java - 递归算法的运行时复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540686/

相关文章:

java - 通过电子邮件搜索打印

python - 旅行推销员: Get all possible Paths with recursion

java - 递归调用没有返回?

python - 在 Python 中运行 munkres 库的复杂性

algorithm - 具有 2 个变量的大 O 表示法。给定 m <= n,我们可以减少 O(nm) 吗?

algorithm - 希尔排序的时间复杂度?

java - 什么是NullPointerException,我该如何解决?

java - 在命令提示符下运行 jar 文件时显示错误 "JavaFX runtime components are missing, and are required to run this application"

java - 从 Dialog 中获取数据并将其发布到 MainActivity

recursion - Prolog 递归 - 满足两个方向(简单)