我开始失去希望和理智...... 我正在学习Java代码并尝试编写一个程序来选择爱好,但它必须通过两种方法来完成,并且我给出不同的数字......我不知道在哪里寻找错误或如何使其正确。请帮忙!
public static int chooseHobbyRecursive(int[] startNumbers, int day) {
if (day == 0){
return startNumbers [0];
} else if (day == 1) {
return startNumbers [1];
} else if (day == 2) {
return startNumbers [2];
} else if (day == 3) {
return startNumbers [3];
} else {
int prev = chooseHobbyRecursive(startNumbers, day - 1);
int prevPrePrev = chooseHobbyRecursive(startNumbers, day - 3);
return (prev * prevPrePrev) % 10 + 1;
}
}
public static int chooseHobbyIterative(int[] startNumbers, int day) {
List<Integer> numbers = new ArrayList<>();
numbers.add(startNumbers[0]);
numbers.add(startNumbers[1]);
numbers.add(startNumbers[2]);
numbers.add(startNumbers[3]);
for (int d = 0; d < day; d++) {
int index = d + 4;
int prev = numbers.get(index - 1);
int prePrePrev = numbers.get(index - 3);
numbers.add((prev * prePrePrev) % 10 + 1);
}
return numbers.get(numbers.size() - 1);
}
}
我一直在尝试重写代码,但它通常要么因 ArrayIndexOutOfBoundsException 而终止,要么具有不同的数字
输出:
=== Day 1 ===
Iterative = 4 | Recursive = 1
=== Day 2 ===
Iterative = 1 | Recursive = 20
=== Day 5 ===
Iterative = 8 | Recursive = 1
=== Day 15 ===
Iterative = 2 | Recursive = 3
UPD: 任务指出:一开始,学生写下两个数字:他出生的日期和月份,然后写下两个数字 - 当前年份的两半。例如,如果他出生于1月21日,年份是2023年,那么前四个数字是21 1 20 23。接下来的每个数字都是通过以下规则获得的:前一天和前两天取,相乘,余数除以10,然后加1,这样就从1开始编号。每个这样的数字都是从 1 到 10,并且是他当天要做的爱好的编号。
我得到了迭代方法和创建递归方法的工作,但我不明白如何(我想出了如何制作递归部分),但不知何故不知道如何使方法 ChooseHobbyRecursive 正确。
我非常感谢您的解释或/和我错误的部分或任何建议。谢谢!
我的建议如下:
算前4天
向数组添加内存
检查内存数组中的单元格是否为空(!=0)
如果为空,则开始递归
public static int choiceHobbyRecursive(int[] startNumbers, int day, int[] memory) {
int day1 = (startNumbers[startNumbers.length - 1] * startNumbers[startNumbers.length - 3]) % 10 + 1;
if (day == 1) {
return day1;
}
int day2 = (day1 * startNumbers[startNumbers.length - 2]) % 10 + 1;
if (day == 2) {
return day2;
}
int day3 = (day2 * startNumbers[startNumbers.length - 1]) % 10 + 1;
if (day == 3) {
return day3;
}
int day4 = (day3 * day1) % 10 + 1;
if (day == 4) {
return day4;
}
memory[0] = day1;
memory[1] = day2;
memory[2] = day3;
memory[3] = day4;
if (memory[day - 1] != 0) {
return memory[day - 1];
}
memory[day - 1] = (chooseHobbyRecursive(startNumbers, day - 1, memory) * chooseHobbyRecursive(startNumbers, day - 3, memory)) % 10 + 1;
return memory[day - 1];
}