Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要简单的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 - Fatal编程技术网

需要简单的C++递归解释 我目前正试图绕过递归,所以我选了一本C++教材,开始阅读。关于递归一章的前几页很容易理解,但后来我发现一个对我来说毫无意义的项目 int height(node *p) { if(p==NULL) return 0; else{ return 1 + max(height(p->llink),height(p->rlink)); }

需要简单的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将返回

如果max给出两个值中最大的一个,那么max是如何从返回的高度获取参数的。
如果有人能帮忙,我将不胜感激……

要理解递归,你必须递归地思考:

您可以理解空树的高度为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页面: