代码 returns Java 递归中的堆栈溢出错误
Code returns Stack overflow error in Java recursion
此代码返回堆栈溢出错误,我该怎么办?
/* package whatever; // don't place package name! */
import java.io.*;
class myCode
{
public static void main (String[] args) throws java.lang.Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
System.out.println(printStar(Integer.parseInt(input)));
}
private static int printStar(int n){
if(n > 0){
System.out.print("\n hello");
}
return printStar(n-1);
}
}
您的 printStar 函数将永远继续,因为即使 n 命中 0 或以下,您也不会停止递归函数。
假设您输入数字 2。
第一次通话:printStar(2)
。打印 hello
并调用 printStar(1)
.
第二次通话:printStar(1)
。打印 hello
并调用 printStar(0)
.
第 3 次通话:printStar(0)
。不打印任何内容,因为 n > 0
为假。 但是,仍然调用printStar(-1)
。
您的代码正在独立于 n 的值调用下一步。根据我对你想要实现的目标的理解,你的递归调用应该在 if
块内。如果 n > 0
return 为假,则只是 return 其他内容,例如 -1
.
代码如下所示:
private static int printStar(int n) {
if (n > 0) {
System.out.print("\n hello");
return printStar(n - 1);
}
return -1;
}
不过,我必须指出,我不确定 printStar
return 是否是一个好主意。 returned 值将始终相同。您可以将方法更改为 void
。您的整个代码如下所示:
public static void main(String[] args) throws java.lang.Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
printStar(Integer.parseInt(input));
}
private static void printStar(int n) {
if (n > 0) {
System.out.print("\n hello");
printStar(n - 1);
}
}
此代码返回堆栈溢出错误,我该怎么办?
/* package whatever; // don't place package name! */
import java.io.*;
class myCode
{
public static void main (String[] args) throws java.lang.Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
System.out.println(printStar(Integer.parseInt(input)));
}
private static int printStar(int n){
if(n > 0){
System.out.print("\n hello");
}
return printStar(n-1);
}
}
您的 printStar 函数将永远继续,因为即使 n 命中 0 或以下,您也不会停止递归函数。
假设您输入数字 2。
第一次通话:printStar(2)
。打印 hello
并调用 printStar(1)
.
第二次通话:printStar(1)
。打印 hello
并调用 printStar(0)
.
第 3 次通话:printStar(0)
。不打印任何内容,因为 n > 0
为假。 但是,仍然调用printStar(-1)
。
您的代码正在独立于 n 的值调用下一步。根据我对你想要实现的目标的理解,你的递归调用应该在 if
块内。如果 n > 0
return 为假,则只是 return 其他内容,例如 -1
.
代码如下所示:
private static int printStar(int n) {
if (n > 0) {
System.out.print("\n hello");
return printStar(n - 1);
}
return -1;
}
不过,我必须指出,我不确定 printStar
return 是否是一个好主意。 returned 值将始终相同。您可以将方法更改为 void
。您的整个代码如下所示:
public static void main(String[] args) throws java.lang.Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
printStar(Integer.parseInt(input));
}
private static void printStar(int n) {
if (n > 0) {
System.out.print("\n hello");
printStar(n - 1);
}
}