我刚刚开始学习递归,并且能够使用它编写一个简单的阶乘程序而没有太多问题。现在我正在尝试编写一个以相反顺序写入数组的递归方法,但我无法弄清楚我做错了什么。我错过了什么?谢谢。
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 :(得分: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
的当前位置。