簡體   English   中英

代碼在 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);

  }

}

假設您輸入數字 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM