gpt4 book ai didi

c - return 语句中的递归

转载 作者:行者123 更新时间:2023-11-30 15:24:58 25 4
gpt4 key购买 nike

有人可以向我解释一下 return 语句中两个递归函数的执行吗,就像这样

struct node
{
int data;
struct node* left;
struct node* right;
};


struct node* newNode(int data)
{
struct node* node = (struct node*)malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}

int size(struct node* node)
{
if (node==NULL)
return 0;
else


return(size(node->left) + 1 + size(node->right));


}


int main()
{

struct node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
printf("Size of the tree is %d", size(root));
getchar();
return 0;
}

本例中return语句中的size()函数是如何执行的,是从左到右还是从右到左!我想知道这两个函数的执行流程。

最佳答案

递归由两个概念驱动:传播条件和终止条件。

条件 (node == NULL) 是递归的终止条件,size(node->left) + 1 + size(node->right) 是传播条件,从左树和右树传播根节点和后续节点,并将节点本身的大小加 1。

为了充分向您解释,我们需要一个示例树

                 3          4               5      1        2      9       8

Recursion goes like this for sample tree

size(3)
= size(4) + size(5) + 1

现在让我们看看size(4) = size(1) + size(2) + 1size(1) = size(NULL) + 1 = 0 + 1 = 1(因为 1 没有剩余,如果节点为 NULL,则函数返回 0 - 终止条件)大小(2) = 大小(NULL) + 1 = 0 + 1 = 1因此大小(4)是3

以类似的方式,size(5) 也将是 3,因此size(1) = 3+3+1 = 树中的 7 个节点

因此执行是

size (3) 
size (4) + size (5) + 1
size (1) + size (2) + 1 + size(9) +size (8) + 1
size (NULL) + 1 +size (NULL) + 1 + 1 +size (NULL) + 1 +size (NULL) + 1 +1

最终返回为

return 0 + 1+ 0+1+1+0+1+0+1+1 

返回7

关于c - return 语句中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28135410/

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