需要简单的C++递归解释 我目前正试图绕过递归,所以我选了一本C++教材,开始阅读。关于递归一章的前几页很容易理解,但后来我发现一个对我来说毫无意义的项目 int height(node *p) { if(p==NULL) return 0; else{ return 1 + max(height(p->llink),height(p->rlink)); }
如果max给出两个值中最大的一个,那么max是如何从返回的高度获取参数的。需要简单的C++递归解释 我目前正试图绕过递归,所以我选了一本C++教材,开始阅读。关于递归一章的前几页很容易理解,但后来我发现一个对我来说毫无意义的项目 int height(node *p) { if(p==NULL) return 0; else{ return 1 + max(height(p->llink),height(p->rlink)); },c++,recursion,binary-tree,C++,Recursion,Binary Tree,如果max给出两个值中最大的一个,那么max是如何从返回的高度获取参数的。 如果有人能帮忙,我将不胜感激……要理解递归,你必须递归地思考: 您可以理解空树的高度为0 您可以理解,一般非空树的高度为1+最长子树的高度,该子树可以是从左侧或右侧开始的子树 从这一点开始,您可以轻松理解代码。如果你画这棵树,你就会看到发生了什么。例如,如果你有 A / \ B C / \ D E heightA将返回1+最大Heightb,heightC heightB将返回
如果有人能帮忙,我将不胜感激……要理解递归,你必须递归地思考: 您可以理解空树的高度为0 您可以理解,一般非空树的高度为1+最长子树的高度,该子树可以是从左侧或右侧开始的子树 从这一点开始,您可以轻松理解代码。如果你画这棵树,你就会看到发生了什么。例如,如果你有
A
/ \
B C
/ \
D E
heightA将返回1+最大Heightb,heightC
heightB将返回1+maxheightD,heightE
heightC将返回1+maxheightNULL,heightNULL=1
heightD将返回1+maxheightNULL,heightNULL=1
heightE将返回1+maxheightNULL,heightNULL=1
所以
我省略了对heightNULL的调用,因为它们通常为0,否则会太冗长。要理解递归,必须递归思考: 您可以理解空树的高度为0 您可以理解,一般非空树的高度为1+最长子树的高度,该子树可以是从左侧或右侧开始的子树 从这一点开始,您可以轻松理解代码。如果你画这棵树,你就会看到发生了什么。例如,如果你有
A
/ \
B C
/ \
D E
heightA将返回1+最大Heightb,heightC
heightB将返回1+maxheightD,heightE
heightC将返回1+maxheightNULL,heightNULL=1
heightD将返回1+maxheightNULL,heightNULL=1
heightE将返回1+maxheightNULL,heightNULL=1
所以
我省略了对heightNULL的调用,因为它们通常为0,否则会太冗长。函数的参数在函数调用之前求值 因此,您的等效示例可能看起来像以下内容,这可能更有意义:
int height(node *p)
{
if(p==NULL)
return 0;
else{
int heightLeftSubtree = height(p->llink);
int heightRightSubtree = height(p->rlink);
return 1 + max(heightLeftSubtree, heightRightSubtree);
}
}
函数的参数在函数调用之前求值 因此,您的等效示例可能看起来像以下内容,这可能更有意义:
int height(node *p)
{
if(p==NULL)
return 0;
else{
int heightLeftSubtree = height(p->llink);
int heightRightSubtree = height(p->rlink);
return 1 + max(heightLeftSubtree, heightRightSubtree);
}
}
画一张节点树的图片,盯着它看一会儿,从高度上思考代码。关注基本情况,画一棵树,然后向后工作。Jacks的回答是关于如何进行的一个很好的提示-0是递归的终止,节点从父节点指向左、右子节点——以此类推……你读过维基百科页面吗:或者简单的维基页面:画一张节点树的图片,盯着它看一会儿,思考代码的高度。关注基本情况,画一棵树并向后工作。Jacks的回答是关于如何进行的一个很好的提示-0是递归的终止点,节点从父节点指向左、右子节点-等等…您是否阅读过wikipedia页面:或简单wiki页面: