[英]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);
}
}
假設您輸入數字 2。
第一次調用: printStar(2)
。 打印hello
並調用printStar(1)
。
第二次調用: printStar(1)
。 打印hello
並調用printStar(0)
。
第三次調用: printStar(0)
。 不打印任何內容,因為n > 0
是假的。 但是,仍然調用printStar(-1)
。
您的代碼獨立於 n 的值調用下一步。 根據我對您想要實現的目標的理解,您的遞歸調用應該在if
塊內。 如果n > 0
返回 false,則返回其他內容,例如-1
。
代碼如下所示:
private static int printStar(int n) {
if (n > 0) {
System.out.print("\n hello");
return printStar(n - 1);
}
return -1;
}
不過,我必須指出,我不確定printStar
返回一個值是否是一個好主意。 返回的值將始終相同。 您可以將該方法更改為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);
}
}
您的printStar函數將永遠持續下去,因為即使n達到 0 或更低,您也不會停止遞歸函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.