回 帖 发 新 帖 刷新版面

主题:[讨论]递归函数的问题

int  nodes(Bnode *root)
{
int num1,num2;
if(root==NULL)return(0);
else
{
  num1=nodes(root->lchild);
  num2=nodes(root->rchild);
  return(num1+num2+1);/*加1是因为要算上根节点*/
}
return (num1+num2);
}
int  nodeO(Bnode *root)
{
int num1,num2;
if(root==NULL)return(0);
else
{
  num1=nodeO(root->lchild);
  num2=nodeO(root->rchild);
  if(root->lchild==NULL&&root->rchild==NULL) 
  return(num1+num2+1);/*加1是因为要算上根节点*/
  else  return(num1+num2);
}
}

int  node1(Bnode *root)
{
int num1,num2;
if(root==NULL)return(0);
else if( (root->lchild!=NULL&&root->rchild==NULL) ||(root->lchild==NULL&&root->rchild!=NULL))
  return(1);
else
{
  num1=node1(root->lchild);
  num2=node1(root->rchild); 
   return(num1+num2+1 );/*加1是因为要算上根节点*/
    
  } 
}
int  node2(Bnode *root)
{
int num1,num2;
if(root==NULL)return(0);
else
{
  num1=node2(root->lchild);
  num2=node2(root->rchild);
  if(root->lchild!=NULL&&root->rchild!=NULL) 
  return(num1+num2+1);/*加1是因为要算上根节点*/
  else  return(num1+num2);
}
}
/*以上是二叉树算结点的算法, nodes()递归算法求节点总数求出总结点的个数,在这里我很糊涂了,node0( )、node1( )、node2( )分别求出度为0、1、2结点的个数,里面的参数都是int num1、int num2这个两个参数,这两个参数都没有被确定赋初值,那么函数返回的值应该是一个不确定的值吧?是不是递归程序中的变量不同,请帮忙理解。谢谢*/

回复列表 (共4个回复)

沙发

没赋初值有什么关系呢?node2(root->lchild);这里返回的是一个整型量,已经给赋值了
只不过这个程序没有明确说明什么时候返回1或者2或者0这种特殊值,所以看起来很晕

板凳

就是晕了^_^

3 楼

你自己可以在递归调用的前后各+个printf自己看看函数值有什么变化

4 楼

谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册