public static long fibby(long n){
if (n == 0){
return 1;
}
return (fibby(n/4))+(fibby(3*n/4));
}
public static void sparsetablegen(int start, int end){
long fibbyOut = fibby(start);
long lastFibbyOutput = fibbyOut;
System.out.println(start+" "+fibbyOut);
if(start != end){
sparsetablegen(start+1, end);
if (lastFibbyOutput == fibbyOut){
return;
}
}
}
免责声明:这是我的java项目的作业,我尝试了多种方法,但无法找到可行的解决方案。我将发布我对代码的理解以及哪些内容无法正常工作。
我的表应该做的是从" int start"开始接收值。然后在int" end"结束,这些值将由我的" fibby"功能。然后它应该打印" start"的值。和fibbyOut并排,直到它击中"结束"。 我应该做的是跳过fibbyOut的任何重复值 例如,我可能会看到: 1 - > 2 2 - > 3 3 - > 4 4 - > 6 5 - > 6 6 - > 8
然后我想跳过起始值5,因为4的fibbyOut是6并且它是重复的值。 相反,我应该看到 1→ 2 2→ 3 3→ 4 4-> 6 6-> 8
我知道这是一个非常基本的问题,但我似乎无法想象如何删除fibbyOut的重复值。谢谢你的帮助。
答案 0 :(得分:1)
大规模编辑:在了解了问题的真正含义之后,我输入了这个:
package Main;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Long> outputs = new ArrayList<>();
table(0, 8, outputs);
}
public static void table(int start, int end, List<Long> outputs) {
outputs.add(fibby(start));
long lastFibbyOutput = outputs.get(outputs.size() - 1);
for(int i = outputs.size() - 2; i >= 0; i--) {
if(outputs.size() == 1) {
System.out.println(start + " " + lastFibbyOutput); //Always print the first time because it will be a unique value.
break;
} else if(outputs.get(i) == lastFibbyOutput) {
//One of the values matches a previous one, so we break
break;
}
//We're at the end without breaking, so we print.
if(i == 0) System.out.println(start + " " + lastFibbyOutput);
}
if(start == end) {
return;
}
start++;
table(start, end, outputs);
}
public static long fibby(long n) {
if(n == 0) return 1;
return (fibby(n/4) + fibby(3 * n / 4));
}
}