布尔递归第2部分

时间:2011-02-16 17:22:41

标签: java recursion

尝试编写一个布尔函数,如果'm'是当前类的祖先,则返回true。如果是妈妈或爸爸,或是妈妈或爸爸的祖先,那么'm'是祖先。

这会让我到那儿吗?

public boolean isAncestor(member m){
        if (mom == m || dad == m){
            return true;
        }
        else{
            if(isAncestor(m.mom) || isAncestor(m.dad)){
                return true;
            }
        }
        return false;
    }

谢谢!

6 个答案:

答案 0 :(得分:2)

是的,或多或少。如果你到了一个不知道妈妈或爸爸的祖先层,并且是空的怎么办?

public boolean isAncestor(member m){
        if (m == null)
            return false;
        if (mom.equals(m) || dad.equals(m))
            return true;
        else if(isAncestor(m.mom) || isAncestor(m.dad))
            return true;
        return false;
    }

答案 1 :(得分:0)

逻辑会让你到达那里,但是必须注意等号。

在Java ==中比较实例的相等性。可能性很大,随着时间的推移,你会有两个相对平等但在不同情况下存在的实例。如果您的代码是为防止此类事件发生而编写的,则您无需将==更改为.equals(...);但是,如果您没有放入任何保护措施以确保只存在每个“相同”对象的一个​​实例,那么您可能希望将比较更改为.equals(...)并实现自定义“公共布尔值等于(对象其他) {...}`基础“人”类的方法。

答案 2 :(得分:0)

如果您要使用递归,则需要停止条件。每个人都有妈妈或爸爸吗?考虑一下:

public boolean isAncestor(Member m) {
     // stop condition
    if(this.mom == null && this.dad == null) return false;
    // stop condition
    if(this.mom == m || this.dad == m) return true;
    // loop condition
    return mom.isAncestor(m) || dad.isAncestor(m);
}

答案 3 :(得分:0)

可能但不是100%正确。你还应该检查妈妈和爸爸是否存在,否则你可能会得到NullPointerException。

此外,其他人使用==时是正确的,非常可疑。

答案 4 :(得分:0)

如果没有关系,递归何时停止?

答案 5 :(得分:0)

实际上,您需要一种方法来了解您要比较哪两个成员的关系。你可能想要做这样的事情(未经测试):

/**
 * @param m1 the member we want to get ancestry from
 * @param m2 the member we presume is an ancestor
 */
public boolean isAncestor(member m1, member m2){
    if (m1 == NULL || m2 == NULL) {
        return false;
    }
    if (m1.isMom(m2) || m1.isDad(m2)){
        return true;
    }
    else if(isAncestor(m1.mom, m2) || isAncestor(m1.dad, m2)) {
        return true;
    }
    return false;
}

您需要撰写isMomisDad来比较m2m1的关系。