gpt4 book ai didi

c - 为什么 'static int'在递归计算链表长度时给出不同的答案?

转载 作者:行者123 更新时间:2023-11-30 21:44:53 24 4
gpt4 key购买 nike

我正在使用 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 个副本。否则,每个函数调用都会生成一个副本并删除以前的值。

最佳答案

当 len 是静态时,并不是每次调用 length 都会增加同一个变量。

这就是发生的事情

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。

关于c - 为什么 'static int'在递归计算链表长度时给出不同的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32442407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com