gpt4 book ai didi

java - 需要帮助修复关于不使用连续输入打印输出的倍数的递归方法

转载 作者:行者123 更新时间:2023-12-02 09:56:42 26 4
gpt4 key购买 nike

这是我大学类(class)的作业。通常我会给老师发邮件,但现在已经晚上 11 点了。我需要帮助的方法是 printsparsetablehelp。它使用 fibby 方法来计算 n。一些 fibby 计算与前面的相同。 printsparsetable 用于不打印副本。例如 8、9 和 10 的 fibby 都有相同的输出。它应该只打印 8。我的问题是它打印出正确的数字,但由于某种原因它会返回到该方法并降低起始值并重新打印一些数字。我用开始 5 和结束 10 调用此方法。它应该返回 5 6 6 8 8 11。

public static int fibby(int n) {
if(n == 0) {
return 1;
}
return fibby(n/4) + fibby((3*n)/4);
}

public static void printsparsetable(int start, int end) {
printsparsetablehelp(start, end, start);
}
public static void printsparsetablehelp(int start, int end, int initialStart) {
if(start == initialStart) {
System.out.println(start + " " + fibby(start));
printsparsetablehelp(start + 1, end, initialStart);
}
if(start > end) {
} else {
if(fibby(start) == fibby(start - 1)) {
if(start + 1 <= end) {
printsparsetablehelp(start + 1, end, initialStart);
}
} else {
if(start <= end) {
System.out.println(start + " " + fibby(start));
if(start + 1 <= end) {
printsparsetablehelp(start + 1, end, initialStart);
}
}
}
}

}

最佳答案

在我看来,第一个条件 (if(start == initialStart)) 是错误的,会导致额外的计算。

我建议将其与 fibby(start) == fibby(start - 1) 条件结合起来。

public static void printsparsetablehelp(int start, int end, int initialStart) {
if(start <= end) {
if(start > initialStart && fibby(start) == fibby(start - 1)) {
if(start + 1 <= end) {
printsparsetablehelp(start + 1, end, initialStart);
}
} else {
if(start <= end) {
System.out.println(start + " " + fibby(start));
if(start + 1 <= end) {
printsparsetablehelp(start + 1, end, initialStart);
}
}
}
}
}

可以进一步简化为

public static void printsparsetablehelp(int start, int end, int initialStart) {
if(start <= end) {
if(start == initialStart || fibby(start) != fibby(start - 1)) {
System.out.println(start + " " + fibby(start));
}
if(start + 1 <= end) {
printsparsetablehelp(start + 1, end, initialStart);
}
}
}

如果您确定在对 printsparsetablehelp 的初始调用中 start <= end ,则可以进一步简化:

public static void printsparsetablehelp(int start, int end, int initialStart) {
if(start == initialStart || fibby(start) != fibby(start - 1)) {
System.out.println(start + " " + fibby(start));
}
if(start + 1 <= end) {
printsparsetablehelp(start + 1, end, initialStart);
}
}

关于java - 需要帮助修复关于不使用连续输入打印输出的倍数的递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946401/

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