java - 递归函数返回真/假后,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。我试图做布尔变量并返回它,但这给了我一个运行错误。
有没有办法避免写最后一行或任何其他方法来解决这个问题?
解决方案
只需在每个 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;
推荐阅读
- mongodb - " 特质绑定 `Bson: From
使用带有 u128 属性的 doc! 宏时出现“不满足”错误 - templates - 带有模板的 Yeoman 复制目录
- gitlab-ci - 无法使用 gilab-ci 中的内置方法获取保管库机密
- python - AttributeError:未找到下限;从 Sklearn CountVectorizer 中删除不常见的功能?
- javascript - 从使用过滤器参数的 API 中删除硬编码 URL 字符串的最佳方法
- ios - 为什么 UIButton.setTitle 会改变字体大小?
- reactjs - 我如何制作组件显示?
- javascript - 如何在 js 的 for of 循环中使用 .indexOf
- html - 如何隐藏网格中我不在媒体查询中使用的部分?
- reactjs - 我的 App 功能没有读取导入的组件。我收到“已定义但从不使用”警告