gpt4 book ai didi

java - 递归方法中不需要返回

转载 作者:行者123 更新时间:2023-12-02 02:12:50 25 4
gpt4 key购买 nike

我正在编写一个递归代码,计算我们需要执行的最少操作次数,以便 s2 等于 s1,有效操作是 插入 1 个字符 (di)删除 1 个字符 (dc)dn 保持不变

private static int editDistance(String s1, String s2) {

if((s2.isEmpty() && (dn == 0 && dc == 0 && di == 0)) || (s1.isEmpty() && (dn == 0 && dc == 0 && di == 0)))
return Integer.max(s1.length(), s2.length());

if(s2.isEmpty()) {
return 0;
} else if(s1.isEmpty()) {
dc++;
return 1 + editDistance(s1, rest(s2));
} else if(s1.charAt(0) == s2.charAt(0)) {
dn++;
return editDistance(rest(s1), rest(s2));
} else if(s1.charAt(0) != s2.charAt(0) && dc <= di) {
dc++;
return 1 + editDistance(s1, rest(s2));
} else if(s1.charAt(0) != s2.charAt(0) && dc > di) {
di++;
return 1 + editDistance(rest(s1), s2);
}

return 0;

}

例如,如果我们有 s1 =“home”和 s2 =“hote”,则将有 1 个删除操作(对于“t”)、1 个插入操作(“m”)和 3 个不执行任何操作。

问题是我的语句在 if/else if 分支中被取消,因此为了编译我的程序,我必须在底部放置一个 return 0 语句,这是毫无意义的,我该如何纠正这?

最佳答案

如果这些条件耗尽了所有可能性,我建议您不要删除任何条件(因为这是程序执行其操作的原因的文档),而是抛出异常 - 例如 AssertionError 与消息“这不可能发生”。

这是因为有时由于重构或魔法,不应该发生的事情确实发生了,最好不要忽略它们,而是让应用程序崩溃(因为它处于不一致的状态)。

Java 编译器根本无法总是检测到不可能的场景(计算成本太高,并且在某些情况下 - 不可能 - 请参阅“停机问题”)。

关于java - 递归方法中不需要返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49718768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com