LinkedListNode addLists(LinkedListNode l1, LinkedListNode l2, int carry) {
if(l1 == null && l2 == null && carry == 0) {
return null;
}
LinkedListNode result = new LinkedListNode(carry,null,null);
int value = carry;
if(l1 != null)
value += l1.data;
if(l2 != null)
value += l2.data;
result.data = value % 10;
//Recursive call
if(l1 != null || l2 != null || value >= 10) {
LinkedListNode more = addLists(l1 == null? null : l1.next,
l2 == null? null : l2.next,
value >= 10? 1 : 0);
result.setNext(more);
}
return result;
}
我对addLists(arg1,arg2,arg3)
的递归调用的怀疑是:
more
的确切存储内容是什么?换句话说,more
是否会叠加每次递归调用的结果?result.setNext(more)
?return
值如何运作?我理解递归的概念,并经历了各种其他答案。但是,return
语句以及分配给more
的递归调用的情况似乎有所不同,并使其混淆。真的很感激这个场景的简单解释。谢谢。
答案 0 :(得分:3)
它可能感觉像魔术,但事实并非如此。在您的代码中,您可以按顺序调用方法:
System.out.println("first line");
System.out.println("second line");
但你永远不会质疑它为什么打印“第二行”。当“第一行”的打印完成时,它恢复执行。
使用递归也是一样的。有一次,它击中了一个基础案例。在你的代码中
当两个节点都为空且carry
小于10时,它就会返回。如果是递归调用,则会添加该值,并且该方法的实例将返回等一直到初始被调用者然后将以与我的示例中的两个System.out.println
行相同的方式继续执行下一行。
每次调用方法时,变量都与前一个不同。因此,即使有10个级别的通话,它们都有自己的l1
,l2
,carry
,甚至more
,并且当它们都会继续下一行时current方法返回就像任何其他方法一样。递归方法并不特别!