从方法返回后如何停止递归

use*_*404 0 java recursion

我有一个程序可以调用一个递归的功能.

int dd=dis(root,2,0);
Run Code Online (Sandbox Code Playgroud)

功能代码

   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;
}
Run Code Online (Sandbox Code Playgroud)

当数据等于节点值时,函数返回count,即我需要的确切值.但是,在返回count之后递归继续,并在函数结束时返回异常计数值.

我希望在从==大小写返回count之后完全退出函数,我不希望递归在第一次计数返回后修改调用函数中的值.

rua*_*akh 6

改变这个:

        dis(n.right,g,count);
Run Code Online (Sandbox Code Playgroud)

对此:

        return dis(n.right,g,count);
Run Code Online (Sandbox Code Playgroud)

还有这个:

        dis(n.left,g,count);
Run Code Online (Sandbox Code Playgroud)

对此:

        return dis(n.left,g,count);
Run Code Online (Sandbox Code Playgroud)

编辑添加:编写此函数的更简单方法可能是:

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);
}
Run Code Online (Sandbox Code Playgroud)

请注意,在这种方法中,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;
}
Run Code Online (Sandbox Code Playgroud)