gpt4 book ai didi

c - 从 C 中的列表的递归组合中打印

转载 作者:行者123 更新时间:2023-11-30 19:02:48 26 4
gpt4 key购买 nike

我想理解以下代码:

struct element{
element *a1;
element *a2;
int value;
};

void main(){
element e6 = { NULL, NULL, 6 };
element e2 = { NULL, NULL, 2 };
element e4 = { NULL, NULL, 4 };
element e7 = { &e6, NULL, 7 };
element e9 = { NULL, NULL, 9 };
element e3 = { &e2, &e4, 3 };
element e8 = { &e7, &e9, 8 };
element e5 = { &e3, &e8, 5 };

cout << CountList(&e5) << endl;

return;}

int CountList(element *e){
int c=1;
if(e){
c=c+CountList(e->a1);
c=c+CountList(e->a2);
return c;}
return 0;
}

计数是8。但是我如何理解递归线?我的想法是,计数必须为 6,因为递归函数仅被调用 4 次。编译器显示 8,这已经是正确的解决方案。但为什么??

最佳答案

这是一棵树

            e5
/ \
e3 e8
/ \ / \
e2 e4 e7 e9
|
e6

递归函数从e5开始,首先使用e3调用自身,然后使用e2调用自身,再次使用NULL调用并返回(至e2)。

e2 另一端进行调用,该调用也为 NULL,然后返回(到 e3)。

e3 调用 e4,它只有 NULL 子级并返回(到 e3)。

从那里,e3 返回到 e5,后者调用另一端 (e8)...

每个非 NULL 元素将自身计数为 1,并添加到非 NULL 子元素中。

总共有 8 个。树中元素的数量。

<小时/>递归函数的调用次数至少为 8 次,才能访问所有子级。如果使用 NULL 元素 (9) 计算调用次数,则调用总数为 17。

关于c - 从 C 中的列表的递归组合中打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55329143/

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