递归语句不是立即返回

时间:2019-01-21 20:49:29

标签: java recursion

我正在创建一种方法,该方法采用数字列表和索引。

如果索引后面有一个数字是第一个数字的六倍,则返回true。否则,它返回false。

 public static boolean firstElementMultiple(int []Numbers, int index) {
        System.out.println(Numbers[index]);

        if ((Numbers[0]*6)==Numbers[index]){
            System.out.println("Yep");
            return true;
        }

        if (index+1 >= Numbers.length){
            return false;
        }


        firstElementMultiple(Numbers, index+1);

        return false;

列表为{5,6,7,30},索引为1,即使列表中有30个,也会返回false。

6 7 30 是的

已打印,表明我确实知道列表中有30个。但是,即使下一条语句为true,它仍然返回false,应该停止该方法吗?

这必须通过递归完成。

edit:我必须把'return false;'放进去。最后,没有它,它不会让我。但是,我看不到它怎么能到达那里,因为一直有一个递归调用。

2 个答案:

答案 0 :(得分:1)

firstElementMultiple(Numbers, index+1);
return false;

这是您方法的结尾。这就是它的作用。它说:“打电话给firstElementMultiple继续寻找我们想要的值。完成查找后,请完全忽略是否找到它并返回false。”

鉴于此,无论我们是否找到该元素,如何修复它以完成您想要的工作,即返回

答案 1 :(得分:1)

因为最后,无论您在进一步的计算中得到什么,您都将在递归函数中返回false。您应该将代码更改为此:

public static boolean firstElementMultiple(int []Numbers, int index) {
    System.out.println(Numbers[index]);

    if ((Numbers[0]*6)==Numbers[index]){
        System.out.println("Yep");
        return true;
    }

    if (index+1 >= Numbers.length){
        return false;
    }

    return firstElementMultiple(Numbers, index+1);
}

基本上您需要更改

firstElementMultiple(Numbers, index+1);
return false;

return firstElementMultiple(Numbers, index+1);