递归问题

时间:2017-04-17 02:53:16

标签: java recursion

我的代码应该在用3调用时打印下面的输出,但是每次运行它时它只打印2行null。

---
*--
**-
***

每当我尝试更改某些内容时,它会在运行时出现堆栈溢出错误。我知道如何修复此输出但不是递归。我们不允许使用任何循环,因此这是我遇到问题的地方。任何帮助将不胜感激。

public void printPattern(int n) {
if(n>0){
    System.out.println(printPatternStripes(n));
    printPatternStripes(n-1);
    System.out.println(printPatternStars(n));
    printPatternStars(n+1);
}
}
  private String printPatternStars(int stars){
      if(stars==0){
        return printPatternStars(stars+1) + "*"; 


      }
      else{
    return null;
  }}

    private String printPatternStripes(int stripes){
        if(stripes!=0){
            return printPatternStripes(stripes-1)+ "_";
        }
        else{
        return null;
    }}

2 个答案:

答案 0 :(得分:1)

因为你被允许使用辅助方法,所以这样的东西可以工作:

public void printPattern(int n) {
    printHelper(n, n);
}

public void printHelper(int n, int initialSize) {
    if(n > 0) {
        printHelper(n - 1, initialSize);
    }

    System.out.print(stringHelper("*", n));
    System.out.println(stringHelper("-", initialSize - n));
}

public String stringHelper(String string, int length) {
    if (length == 0) {
        return "";
    }

    if (string.length() == length) {
        return string;
    }

    return stringHelper(string + string.charAt(0), length);
}

用法:

printPattern(3);

>> ---
   *--
   **-
   ***

答案 1 :(得分:-1)

一个问题是,除了return null;之外,您应该在其他两个声明中return "";