首页 > 解决方案 > 递归函数返回真/假后,java继续“返回假”行,我只是为了消除错误

问题描述

如果数组 a 包含完全相同的数字,则数组 a 是数组 b 的排列,因此:

a{ 3, 2, 4, 1, 5 } is permutation of b{ 1, 2, 3, 4, 5, 5 };

我写了这段代码:

int x4a[] = { 3, 2, 4, 1, 5 };
int x4b[] = { 1, 2, 3, 4, 5, 5 };
System.out.println(isPermutation(x4a, x4b));//Should return true

public static boolean isPermutation(int[] a, int[] b) {
    return isPermutation(a, b, 0, 0);
}

public static boolean isPermutation(int[] a, int[] b, int indexA, int indexB) {
    
    // This code will return true if the shorter array contains all the members of
    // the longer array.

    // In this case b will be compared to a
    if (a.length < b.length) {
        if (indexB == b.length - 1 && a[indexA] == b[indexB])
            return true;
        else if (a[indexA] == b[indexB])
            isPermutation(a, b, 0, indexB + 1);
        else if (indexA == a.length - 1 && a[indexA] != b[indexB])
            return false;
        else if (indexA < a.length - 1 && a[indexA] != b[indexB])
            isPermutation(a, b, indexA + 1, indexB);

    } else {
        if (indexA == a.length - 1 && a[indexA] == b[indexB])
            return true;
        else if (a[indexA] == b[indexB])
            isPermutation(a, b, 0, indexA + 1);
        else if (indexB == b.length - 1 && a[indexA] != b[indexB])
            return false;
        else if (indexB < b.length - 1 && a[indexA] != b[indexB])
            isPermutation(a, b, indexA, indexB + 1);
    }
    // DEAFAULT to eliminate the error
    return false;
}

尽管它应该返回 true,但它返回 false。当我在调试器中运行时,它向我显示递归成功地深入,但是当它退出时,它会运行最后一行返回 false。我试图做布尔变量并返回它,但这给了我一个运行错误。

有没有办法避免写最后一行或任何其他方法来解决这个问题?

标签: javarecursion

解决方案


只需在每个 isPermutation 调用前加上 return ,这样最后一行就不会执行。

if (a.length < b.length) {
        if (indexB == b.length - 1 && a[indexA] == b[indexB])
            return true;
        else if (a[indexA] == b[indexB])
            return isPermutation(a, b, 0, indexB + 1);
        else if (indexA == a.length - 1 && a[indexA] != b[indexB])
            return false;
        else if (indexA < a.length - 1 && a[indexA] != b[indexB])
            return isPermutation(a, b, indexA + 1, indexB);

    } else {
        if (indexA == a.length - 1 && a[indexA] == b[indexB])
            return true;
        else if (a[indexA] == b[indexB])
            return isPermutation(a, b, 0, indexA + 1);
        else if (indexB == b.length - 1 && a[indexA] != b[indexB])
            return false;
        else if (indexB < b.length - 1 && a[indexA] != b[indexB])
            return isPermutation(a, b, indexA, indexB + 1);
    }
    // DEAFAULT to eliminate the error
    return false;

推荐阅读