你能解释一下这个关于链表中递归的代码吗?

时间:2016-05-13 19:26:45

标签: recursion linked-list

问题是添加两个链表,如添加整数。这是问题中的求和函数。

n1和n2是两个列表的头节点,将被添加到l3中。现在在这段代码中我不理解递归部分。

在像fibonacci或factorial这样的正常递归中,我们在代码中有一个条件,说明递归应该何时结束。这里没有这样的条件。你能解释一下它是如何结束的吗?

    int addNode(Node* n1,Node* n2,List* l3)
    {
        if(n1==NULL)
              return 0;
        int carry=addNode(n1->getNode(),n2->getNode(),l3);
        int val=carry+n1->getdata()+n2->getdata();
        int carry1=val/10;
        int quot=val%10;
        l3->prepend(quot);
        return carry1;
    }

2 个答案:

答案 0 :(得分:0)

答案在评论中:

if(n1==NULL)是停止递归的条件。

答案 1 :(得分:0)

如果你采用Fibonacci递归,它在停止递归方面的工作方式类似。

这是斐波纳契的代码片段

int fibonacci(int n)  {
    if(n == 0)
        return 0;
    else if(n == 1)
      return 1;
    else
      return fibonacci(n - 1) + fibonacci(n - 2);
}

注意有一个条件检查if (n == 0)它与你if (n1 == NULL)的逻辑相同,在这两种情况下,你return 0会破坏方法。

一旦发生这种情况,递归就会向上,这意味着对于每次迭代,调用退出时退出该方法的其余部分。在您的示例中,返回carry1