请在这里温柔地对待我...我正在学习并可以使用一些帮助。我试图围绕下面的链表方法。我以为我理解递归是如何工作的,但我在这里遗漏了一些东西。有人可以帮我理解逻辑,以及这个方法的完整调用堆栈吗?我无法弄清楚这些物品是如何加起来的...我担心这里需要一定程度的细节。我在别处寻求帮助,但其他例子似乎没有帮助。
/**
* Compute the sum of all the integers in a linked list of integers.
* @param head a pointer to the first node in the linked list
*/
public static int addItemsInList( IntNode head ) {
if ( head == null ) {
// Base case: The list is empty, so the sum is zero.
return 0;
} else {
// Recursive case: The list is non-empty. Find the sum of
// the tail list, and add that to the item in the head node.
// (Note that this case could be written simply as
//return head.item + addItemsInList( head.next );)
int listsum = head.item;
int tailsum = addItemsInList( head.next );
listsum = listsum + tailsum;
return listsum;
}
}
答案 0 :(得分:0)
阅读评论。评论代码比引入2个临时变量更容易理解。要得到的是,跟随头部的List的其余部分本身就是一个List,而这个List是head.next。
/**
* Compute the sum of all the integers in a linked list of integers.
* @param head a pointer to the first node in the linked list
*/
public static int addItemsInList( IntNode head ) {
if ( head == null ) {
// Base case: The list is empty, so the sum is zero.
return 0;
} else {
// Recursive case: The list is non-empty. Find the sum of
// the tail list, and add that to the item in the head node.
return head.item + addItemsInList (head.next);)
}
}
可以看到4个Int的列表:
List (8, List(7, List (3, List (2, List ()))))
最后一个元素是空列表,返回0.
所以你有head.item 8,并添加addItemsInList(7 ...)。 在那里你添加7并从2 ...添加3 ....
最后,空列表返回0,2 + 0 = 2,返回上一个调用,增加3 + 2并返回5,其中7等待返回12,最后8添加12并返回20