【发布时间】:2016-06-13 19:44:16
【问题描述】:
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;
}
我对@987654323@的递归调用的疑惑是:
- 每个递归调用之后 处究竟存储了什么?换句话说,
more会将 each 递归调用的结果叠加起来吗? - 语句(在递归调用之后)
result.setNext(more)会在每个递归调用中执行吗? - 最终的
return值将如何工作?
我了解递归的概念,并经历了其他各种答案。但是,return 语句的场景以及分配给more 的递归调用似乎有所不同,并且令人困惑。非常感谢对这种情况的简单解释。谢谢。
【问题讨论】:
-
也许不要把它看作递归:把它看作“只是调用一个方法”。如果给
addLists(a, b, c)的电话是doSomething(a, b, c),你能回答这些问题吗? -
递归方法调用与非递归方法调用没有区别。被调用的方法最终会返回或抛出异常,仅此而已。第一种情况,调用方法的执行正常继续。
-
@AndyTurner ,请注意我理解递归的概念。造成混乱的是
LinkedListNode more = addLists(a1,a2,a3)的赋值语句。是否会一次性获取所有结果,然后分配给more? -
@PoojithJain 尊敬的,我认为你不明白。您认为“所有结果”是什么意思?该方法只有 1 个结果。就像一个名为
doSomething的方法返回一个LinkedListNode一样,这是一个名为addLists的方法,它返回一个LinkedListNode。该实例可能已经通过递归调用调用了setNext;但这与你无关,作为方法的调用者。
标签: java recursion linked-list return-value