我有一个程序可以调用一个递归的functin。
int dd=dis(root,2,0);
功能代码
public int dis(Node n,int g,int count)
{
if(g==n.data)
{
System.out.println("equal count"+count);
return count;
}
else if(g>n.data)
{
count=count+1;
dis(n.right,g,count);
}
else if(g<n.data)
{
count=count+1;
dis(n.left,g,count);
}
System.out.println("function"+count);
return count;
}
当数据等于节点值时,函数返回count,即我需要的确切值。但是,在返回count之后递归继续,并在函数结束时返回异常计数值。
我希望在从==大小写返回count之后完全退出函数,我不希望递归在第一次计数返回后修改调用函数中的值。
答案 0 :(得分:5)
改变这个:
dis(n.right,g,count);
到此:
return dis(n.right,g,count);
和此:
dis(n.left,g,count);
到此:
return dis(n.left,g,count);
编辑添加:编写此函数的更简单方法可能是:
public int dis(final Node n, final int g)
{
if(g == n.data)
return 0;
else
return 1 + dis(g < n.data ? n.left : n.right, g);
}
请注意,在这种方法中,count
变量完全消失了:从命令/程序的角度来看,你可能会说,当你下降到树中时,这种方法不是计算节点,而是在它返回时计算它们出。 (但最好从功能/递归的角度来看待它,并说如果相应子树中g
的深度为n
,那么它在父树中的深度就更大了。)
最简单的命令式版本可能是:
public int dis(final Node root, final int g)
{
int depth = 0;
for(Node n = root; g != n.data; n = (g < n.data ? n.left : n.right))
++depth;
return depth;
}