我使用C递归计算链表的长度。
节点的结构如下: -
struct node {
int num;
struct node *ptr;
};
有两个指针 struct node * head (指向列表的头部)和另一个 struct node * temp ,它是用于迭代的指针整个清单。
用于计算长度的代码如下
int length(struct node *temp)
{
int len=0;
if(temp->ptr!=0)
{
len+=length(temp->ptr);
}
return (len+1);
}
这完全没问题。 但是,如果我使用 static int len = 0; 而不是int len = 0;它给出了随机的答案。
例如: - 如果列表是1-> 2-> 3-> 4-> 5,则值为16.
我假设在递归函数调用期间应该使用static,因为只有在这种条件下才会生成1个变量的副本。否则,每个函数调用都会复制并删除以前的值。
答案 0 :(得分:0)
在您的代码中,len
为静态时,添加到其中的值为
1 + 2 + 3 + 4 + 5 = 15
每个用于您正在进行的每个递归调用。
最后,你再次递增它,所以它到了16
要使代码生效,只需在条件len
为真时递增if(temp->ptr!=0)
,然后为下一个节点调用length
。
答案 1 :(得分:0)
当len是静态的时,并不是每次调用长度都会增加相同的变量。
这里发生了什么
1->
2->
3->
4->
5
add 1 to length (length = 1)
add 2 to length (length = 3)
add 3 to length (length = 6)
add 4 to length (length = 10)
add 5 to length (length = 15)
return length + 1 (15 + 1)
16
当您使用本地长度(int length
)时,在每次递归调用时,在此函数实例中将length设置为0.
答案 2 :(得分:0)
你为什么需要Len?
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write(...);
res.write(...);
res.end();