[英]How exactly does a recursive method return a final value and assign its result(s)?
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
显得不同,并取得了十分困惑。 非常感谢您对此场景进行简单的解释。 谢谢。
它可能听起来像魔术,但实际上并非如此。 在您的代码中,您可能会依次调用以下方法:
System.out.println("first line");
System.out.println("second line");
但您永远不会质疑为什么它会显示“第二行”。 当“第一行”的打印完成时,它将恢复执行。
递归是一样的。 一方面,它达到了基本情况。 在您的代码中,当两个节点均为null且carry
小于10时,它通过返回完成,如果是递归调用,则将添加该值,并且该方法的该实例将一直返回等。初始被调用方,该被调用方将继续以与我的示例中的两个System.out.println
行相同的方式执行下一行。
每次调用方法时,变量都与前一个不同。 因此,即使有10个级别的调用,它们都有自己的l1
, l2
, carry
甚至more
并且当当前方法返回时,它们将与下一个其他的methiod一样继续下一行。 递归方法不是那么特别!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.