问题是添加两个链表,如添加整数。这是问题中的求和函数。
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;
}
答案 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
。