Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助修复有关不打印具有连续输入的输出倍数的递归方法吗_Java - Fatal编程技术网

Java 需要帮助修复有关不打印具有连续输入的输出倍数的递归方法吗

Java 需要帮助修复有关不打印具有连续输入的输出倍数的递归方法吗,java,Java,这是我大学课堂的作业。通常我只给老师发电子邮件,但晚上是11点。我需要帮助的方法是printsparsetablehelp。它使用fibby方法计算n。一些fibby计算与前面的相同。printsparsetable用于不打印副本。例如,fibby的8、9和10都具有相同的输出。它应该只打印8。我的问题是,它正在打印正确的数字,但出于某种原因,它会返回到方法中,降低起始值并重新打印一些数字。我用start 5和end 10调用这个方法。它应该会在568811的时候回来 public static

这是我大学课堂的作业。通常我只给老师发电子邮件,但晚上是11点。我需要帮助的方法是printsparsetablehelp。它使用fibby方法计算n。一些fibby计算与前面的相同。printsparsetable用于不打印副本。例如,fibby的8、9和10都具有相同的输出。它应该只打印8。我的问题是,它正在打印正确的数字,但出于某种原因,它会返回到方法中,降低起始值并重新打印一些数字。我用start 5和end 10调用这个方法。它应该会在568811的时候回来

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

    }
publicstaticintfibby(intn){
如果(n==0){
返回1;
}
返回fibby(n/4)+fibby((3*n)/4);
}
公共静态void printparsetable(int start,int end){
printsparsetablehelp(开始、结束、开始);
}
public static void printsparsetablehelp(int start、int end、int initialStart){
如果(开始==初始开始){
System.out.println(start+“”+fibby(start));
printsparsetablehelp(开始+1,结束,初始开始);
}
如果(开始>结束){
}否则{
if(fibby(start)=fibby(start-1)){

if(start+1在我看来,第一个条件(
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);
                }
            }
        }
    }
}

你的问题不太清楚-很难知道你想做什么。你明天有没有可能向你的老师寻求帮助?@DawoodibnKareem,我不得不质疑这个评论的有效性。你不清楚这个问题。好吧。投票结束。解决方案如果有人想在这个问题上得到更多的澄清,这个建议真的毫无帮助:是的,我知道这是一件我忽略了的非常简单的事情。非常感谢@Eran
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);
        }
    }
}
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);
    }
}