java - 基本的java递归错误

标签 java

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 的值,直到到达“end”。 我应该做的是跳过 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 的重复值。感谢您的帮助。

最佳答案

大规模编辑:在了解问题的真正含义后,我输入了以下内容:

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));
    }
}

关于java - 基本的java递归错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44103217/

相关文章:

java - java中如何启动ThreadGroup?

java - 我有一个关于 java jar 包的问题

java - Java 垃圾收集时监控 CPU、RAM、I/O 使用情况

java - Android 中如何知道线程是否正在运行

java - 余额 -= 10,但减去 20?

java - 添加到我的方法快速文档描述(android studio)

java - 操作字符串以创建具有各自索引的新字符串

java - 使用 Maven 和 Java 17 启动 JavaFX 应用程序

java - 同一个类上注解Entity和Component是不是错了

java - Apache Commons AsyncClient - 忽略证书 - SSLPeerUnverifiedException