Java fibonacci堆栈溢出错误

Java fibonacci堆栈溢出错误,java,stack-overflow,Java,Stack Overflow,我不会出错,即使我只输入了1,我能问一下为什么吗 您不处理num==0的情况,因此当调用fibonacci(0)时,递归永远不会结束,当堆栈已满时会导致StackOverflowError 您可以通过更改循环的范围来解决此问题 public static void one() { Scanner sc = new Scanner(System.in); System.out.println("Enter a number:"); int i = sc.nextInt(); Sys

我不会出错,即使我只输入了1,我能问一下为什么吗

您不处理
num==0
的情况,因此当调用
fibonacci(0)
时,递归永远不会结束,当堆栈已满时会导致
StackOverflowError

您可以通过更改循环的范围来解决此问题

public static void one() {
  Scanner sc = new Scanner(System.in);
  System.out.println("Enter a number:");
  int i = sc.nextInt();
  System.out.println(fibonacci(j));
}

for(int j=1;j在for语句中,以0开头。这是fibonacci Funktion的第一个输入。请尝试:

public static int fibonacci(int num) {
    if (num <= 1) {
        return 0;
    }
    else if (num == 2 || num == 3){
        return 1;
    }
    else {
        return fibonacci(num-1) + fibonacci(num-2);
    }
}
publicstaticvoidone(){
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入一个数字:”);
int i=sc.nextInt();

对于(int j=1;j我认为您没有处理零。请尝试以下循环

public static void one() {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number:");
 int i = sc.nextInt();

 for (int j=1; j<i; j++) {
     System.out.println(fibonacci(j));
 }

for(int j=1;j)您的循环以
j=0开始,您的
fibonacci
方法的结果是什么?了解
断点
。然后逐步查看代码以了解发生了什么。这对于developers@Gökhanplat只有在忽略
fibonacci(0)这一事实的情况下当您考虑Fibonacci从零开始的事实时,该解决方案提供了工作。例如,当您输入的总数为我所提供的解决方案的4输出时,0×1 1 2(总数4),但是用罗伯特提供的解决方案,您将得到输出-0 1 1(总数3)。
public static int fibonacci(int num) {
    if (num <= 1) {
        return 0;
    }
    else if (num == 2 || num == 3){
        return 1;
    }
    else {
        return fibonacci(num-1) + fibonacci(num-2);
    }
}
public static void one() {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number:");
 int i = sc.nextInt();

 for (int j=1; j<i; j++) {
     System.out.println(fibonacci(j));
 }
   for (int j=1; j<=i; j++) {
    System.out.println(fibonacci(j));
    }