gpt4 book ai didi

java - 如何停止递归?

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

我正在开展一个学校项目(java 类(class))。目的是研究和创建一些强力密码破解算法(当我不知道密码的长度时,所以我尝试最多 x 个字符的所有密码)并比较它们的工作速度。感谢您的建议,我已经能够创建这个算法,它看起来比以前的算法更有条理。然而,我遇到了一个递归问题

 if (keepworking) {
for (int i = 1; i <= 5; i++) {
possibleCombinations(i, CHOICES, "");
}
}
.....
public static void possibleCombinations(int maxLength, char[] list, String curr) {
if (curr.length() == maxLength) {
tries++;
if (curr.equals(password)) {
System.out.println(curr);
keepworking = false;
return;
}
} else {
for (int i = 0; i < list.length; i++) {
String oldCurr = curr;
curr = curr + CHOICES[i];
possibleCombinations(maxLength, CHOICES, curr);
curr = oldCurr;
}
}
}

它运行良好,它找到了密码,但程序继续。它总是尝试所有可能的组合(尝试次数始终为1178420165) strong>) 即使密码只有 1 个字符。我试图找到密码后停止递归,但是我没有成功。我需要程序尽可能快

您能给我建议为什么它不停止以及如何正确执行吗?

最佳答案

就打破循环而言,我只会设置一个条件来检查 keepworking 标志,例如:

public static void possibleCombinations(int maxLength, char[] list, String curr) {
if(!keepworking){
return;
}
if (curr.length() == maxLength) {
tries++;
if (curr.equals(password)) {
System.out.println(curr);
keepworking = false;
return;
}
} else {
for (int i = 0; i < list.length; i++) {
String oldCurr = curr;
curr = curr + CHOICES[i];
possibleCombinations(maxLength, CHOICES, curr);
curr = oldCurr;
}
}
}

现在,关于正确执行此操作,我们应该返回一个标志或其他内容,而不是取决于全局变量。看看this所以回答详细解释。

关于java - 如何停止递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35781269/

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