繁体   English   中英

递归方法如何精确地返回最终值并分配其结果?

[英]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)的递归调用感到怀疑:

  1. 究竟储存在more每次递归调用 换句话说, 每个递归调用的结果还会more吗?
  2. 语句(在递归调用之后) result.setNext(more)会在每个递归调用中执行吗?
  3. 最终return值将如何工作?

我了解递归的概念,并经历了其他各种答案。 然而,该方案return语句递归调用一起被分配到more显得不同,并取得了十分困惑。 非常感谢您对此场景进行简单的解释。 谢谢。

它可能听起来像魔术,但实际上并非如此。 在您的代码中,您可能会依次调用以下方法:

System.out.println("first line");
System.out.println("second line");

但您永远不会质疑为什么它会显示“第二行”。 当“第一行”的打印完成时,它将恢复执行。

递归是一样的。 一方面,它达到了基本情况。 在您的代码中,当两个节点均为null且carry小于10时,它通过返回完成,如果是递归调用,则将添加该值,并且该方法的该实例将一直返回等。初始被调用方,该被调用方将继续以与我的示例中的两个System.out.println行相同的方式执行下一行。

每次调用方法时,变量都与前一个不同。 因此,即使有10个级别的调用,它们都有自己的l1l2carry甚至more并且当当前方法返回时,它们将与下一个其他的methiod一样继续下一行。 递归方法不是那么特别!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM