2016-02-12 69 views
0

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

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

请详细说明发生了什么问题,最好用一些例子。 –

+0

也许'System.out.print(ary [position-1]);'?结束条件'if(position> 0)'似乎表明这一点。 – WhatsUp

+0

当我运行代码时,我根本没有输出。 – catdog

回答

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

非常感谢。我明白我现在做错了什么。 – catdog

0

在做递归你需要的东西叫做基本情况。你需要基本情况​​来结束递归,否则你会得到堆栈溢出。

你可能会尝试这样的事情。 return语句阻止递归从无止境。

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

尝试:

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递归和后打印的ary的当前位置。