Java 递归函数的时间复杂度

Java 递归函数的时间复杂度,java,recursion,data-structures,linked-list,nodes,Java,Recursion,Data Structures,Linked List,Nodes,假设我使用以下代码反向打印链接列表: public void reverse(){ reverse(head); } private void reverse(Node h){ if(h.next==null){ System.out.print(h.data+" "); return; } reverse(h.next); System.out.print(h.data+" "); } linkedlist是按

假设我使用以下代码反向打印链接列表:

public void reverse(){
    reverse(head);
}

private void reverse(Node h){
    if(h.next==null){
        System.out.print(h.data+" ");
        return;
    }

    reverse(h.next);
    System.out.print(h.data+" ");   
}

linkedlist是按相反的顺序打印出来的,但我不知道它是否有效。如何确定此函数的时间复杂度?有没有更有效的方法来实现这一点?

您可以使用递归树,也可以只扩展T(n)。这两种方法本质上是相同的。您所做的是通过记下递归函数每次在堆栈中被调用时所做的操作来扩展递归函数

例如,每次调用函数时,它都会执行一些固定时间的操作(打印数据),然后递归。 因此,扩展它,您将得到: T(n)=d+T(n-1){因为完成了一次递归,所以少了一次} =d+d+T(n-2) 它会一直持续到它嘶嘶作响为止。所以你的函数会一直持续到列表的长度。因此复杂性:O(n)
看看这个:

您可以使用递归树,也可以只扩展T(n)。这两种方法本质上是相同的。您所做的是通过记下递归函数每次在堆栈中被调用时所做的操作来扩展递归函数

例如,每次调用函数时,它都会执行一些固定时间的操作(打印数据),然后递归。 因此,扩展它,您将得到: T(n)=d+T(n-1){因为完成了一次递归,所以少了一次} =d+d+T(n-2) 它会一直持续到它嘶嘶作响为止。所以你的函数会一直持续到列表的长度。因此复杂性:O(n)
检查一下:

计算递归算法的时间复杂度通常很难。然而,有大量可用的资源。我将从这个问题开始


就这个函数的时间复杂度而言,它是O(n),因为调用reverse n次(每个节点一次)。没有任何更有效的方法可以反转,甚至打印列表。问题本身要求您至少查看列表中的每个元素,根据定义,这是一个O(n)操作。

计算递归算法的时间复杂度通常很困难。然而,有大量可用的资源。我将从这个问题开始


就这个函数的时间复杂度而言,它是O(n),因为调用reverse n次(每个节点一次)。没有任何更有效的方法可以反转,甚至打印列表。问题本身要求您至少查看列表中的每个元素,根据定义,这是一个O(n)操作。

假设列表中有n个元素。每次调用
reverse(Node)
都会将列表长度减少一个元素。因此,效率是O(n),这显然是最优的:在不考虑所有元素的情况下,不能反转列表。

假设列表有n个元素。每次调用
reverse(Node)
都会将列表长度减少一个元素。因此,效率是O(n),这显然是最优的:在不考虑所有元素的情况下,不能反转列表