我的任务是递归打印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();
}
}
答案 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<=n
。 i
的范围是1到n
(在您的情况下为5)。