递归打印1到n

时间:2019-05-19 12:15:11

标签: java recursion

我的任务是递归打印1到5。我已经完成了以下工作,并且可以正常工作,但是我在控制台中遇到了java.lang.StackOverflowError。这应该是预期的还是我可以更好地处理?

   package main;

   import java.util.ArrayList;

   public class Recursion {

    public static void printNumbersRecursively(){
        int [] a = new int [10];
        a[0]=1;//initialization  
        a[1]=2;  
        a[2]=3;  
        a[3]=4;  
        a[4]=5;  

        for(int i=0; i < a.length; i++)
        {
        System.out.println(i);
    }
        printNumbersRecursively();
    }


   public static void main(String[] args){
      printNumbersRecursively();
 }
  }

4 个答案:

答案 0 :(得分:1)

该问题确实指定了从1到n的递归打印。因此,使用1调用时,此功能将从5打印到printNumbersRecursively(1, 5)

public static void printNumbersRecursively(int i, int n) {
    System.out.println(i);
    if (i < n)
        printNumbersRecursively(i + 1, n);
}

答案 1 :(得分:0)

使用类似这样的内容:

    public static void printnumber(int i){
        if(i<0) return;
        System.out.println(i);
        printnumber(i-1);
    }

和主要内容:

printnumber(5);

您收到该stackOverflow错误的原因? 您本身正在调用一个函数,并且何时完成此循环没有控制权!因此,此递归调用将重复执行,直到CPU变满并繁荣为止。

我也建议您学习有关递归函数的更多信息,因为您似乎不了解其基本知识:)

答案 2 :(得分:0)

这个问题有点有用,我找不到立即重复的内容,所以请转到这里:

public static void printNumbersRecursively(int n) {
    if (n > 0)
        printNumbersRecursively(n - 1);
    else
        return;
    System.out.println(n);
}

只需通过main printNumbersRecursively(5);呼叫

答案 3 :(得分:0)

递归解应具有边界条件,否则将不会终止。最终,它将创建一个StackOverflowError。

  package main;

   import java.util.ArrayList;

   public class Recursion {

    public static void printNumbersRecursively(int i, int n){
        if(i<=n) {
          System.out.println(i);
          printNumbersRecursively(i+1, n);
        }
        return;
    }


   public static void main(String[] args){
      printNumbersRecursively(1, 5);
 }
  }

终止条件将为i<=ni的范围是1到n(在您的情况下为5)。