使用递归在java中反转数组

时间:2016-02-12 17:44:58

标签: java recursion

我刚刚开始学习递归,并且能够使用它编写一个简单的阶乘程序而没有太多问题。现在我正在尝试编写一个以相反顺序写入数组的递归方法,但我无法弄清楚我做错了什么。我错过了什么?谢谢。

import java.io.*;

public class Recursion {
  public static void main(String[] args) throws IOException{
    int myArray[] = {1,2,3,4,5,6,7,8,9,10};
  }

  public static void reverseDisplay(int[] ary, int position){
    if(position > 0)
      System.out.print(ary[position]);
     reverseDisplay(ary, position - 1);
  }
}

3 个答案:

答案 0 :(得分:4)

  • 您不会调用递归方法。

  • 你有一个无休止的递归,因为reverseDisplay()总是如此 因缺少括号而被执行。

  • 此外,您的停止条件必须为>= 0,因为数组的第一个索引为0。

您的方法应为:

import java.io.IOException;

public class Recursion {
    public static void main(String[] args) throws IOException{
        int myArray[] = {1,2,3,4,5,6,7,8,9,10};

        reverseDisplay(myArray, myArray.length -1);
    }

    public static void reverseDisplay(int[] ary, int position){
        if(position >= 0) {
            System.out.print(ary[position]);
            reverseDisplay(ary, position - 1);
        }
    }
}

答案 1 :(得分:0)

在进行递归时,您需要一些称为基本案例的东西。您需要基本案例来结束递归,否则您将获得堆栈溢出。

您可以尝试这样的事情。 <{1}}语句阻止递归无休止。

return

答案 2 :(得分:0)

尝试:

public static void reverseDisplay(int[] ary, int position){
     if(int == -1)
         return;
     System.out.print(ary[position]);
     reverseDisplay(ary, position - 1);
  }

如果import java.io.*; public class Recursion { public static void main(String[] args) throws IOException{ int myArray[] = {1,2,3,4,5,6,7,8,9,10}; reverseDisplay(myArray,0); } public static void reverseDisplay(int[] ary, int position){ if(position == ary.length){ return; } reverseDisplay(ary, position + 1); System.out.print(ary[position]); } } 完成递归,则递归调用position == ary.length,然后打印reverseDisplay的当前位置。