【发布时间】:2017-11-02 03:43:29
【问题描述】:
我有以下代码用于树的中序遍历:
void inOrder(struct node* r)
{
if (r==NULL)
return;
else
{
inOrder(r->left);
printf("%d ", r->value);
inOrder(r->right);
}
}
我有这个愚蠢的疑问:
当最左下的孩子作为根传递时,它不为空。 在下一次迭代中,root 将为 null(因为最底部左孩子的左孩子将为 null)并且会遇到 return。
这个 return 语句不会将控制权传递给 main 函数(或调用它的任何地方)而不打印任何内容吗?
return 在递归中的行为是否不同?
【问题讨论】:
-
你知道什么是函数调用栈吗?
-
@StoryTeller 我认为理解这一点不需要调用堆栈的概念,只需要函数调用和返回语句的基本语义
-
递归函数的工作方式与所有其他函数完全一样。我想你可能认为递归是一种循环,但它是一个普通的函数调用。
-
@PasserBy - 显然它是必需的。否则,OP 不太可能对 return 语句将它们带到哪里感到困惑。
-
@StoryTeller 调用堆栈用于所有意图和目的,是一个实现细节,尽管是一个非常知名的细节。函数调用和返回语句是一个概念。例如,用调用堆栈解释 Haskell 中的函数调用是没有意义的。