繁体   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