【发布时间】:2015-01-25 10:32:44
【问题描述】:
谁能解释一下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;
}
在这种情况下,size() 函数如何在 return 语句中执行,无论是从左到右还是从右到左!我想知道这两个函数的执行流程。
【问题讨论】:
-
如果你使用
int s=size(node->left) + 1 + size(node->right); return s;会不会更方便? -
肯定会,但我更想知道 return 语句中的两个递归函数是如何执行的。它们是并行执行还是以某种从左到右或从右到左的方式执行!
-
它不会并行执行,因为 C 不是并行语言。查看Order of evaluation,你会发现并不能保证首先执行哪个递归函数。
-
函数不会并行执行。它们可以从右到左、从左到右、从中间往前或以任何其他顺序执行,但不能并行执行。
标签: c function recursion data-structures tree