【问题标题】:Triangle recursion三角递归
【发布时间】:2012-02-26 23:02:23
【问题描述】:

所以我有一个程序,其中(使用递归)我应该接受用户输入(int)并根据数字绘制一个向后然后向前的三角形......例如下面

用户输入:4 (忽略每个之间的多余空格,之间不应有多余的行)结果:

XXXX 
XXX
XX
X
X
XX
XXX
XXXX

我创建了一个我认为应该这样做的方法,但我遇到了问题

这是我目前的代码

n 是输入数字 z 是一个计数器,试图在制作一个向后/向前的三角形之间切换

    public static String drawLine(int n, int z){

            if(n!=0&& z<(n+1)){
                for(int i=1;i<=n;i++)
                    System.out.print("X");
                System.out.println();
                z+=1;
                drawLine(n-1,z);

                return"";
            } 
            else{
            if( z==(2*n+1) ) return "";
            z+=1;
            String p = drawLine(n - 1,z);
            p = p + "X";
            System.out.println(p);


           return p;    }

            }

错误信息是有一些无限循环或溢出,但我找不到错误....请帮助!!

【问题讨论】:

  • 您希望您的程序返回该字符串还是打印该字符串?如果您选择并坚持一个,那会容易得多。
  • 多么糟糕的递归教学示例......叹息。
  • @JimGarrison 实际上,有一种优雅的递归方式可以做到这一点。但是,没有人发布它。
  • @Taymon 可能是这样,但递归也是斐波那契的“优雅”解决方案,从软件工程的角度来看是完全错误的。

标签: java recursion


【解决方案1】:

试试这个,这是一个更简单的选择:

public static void drawLine(int n) {
    if (n > 0) {
        printChar('X', n);
        drawLine(n - 1);
        printChar('X', n);
    }
}

public static void printChar(char c, int n) {
    for (int i = 0; i < n; i++)
        System.out.print(c);
    System.out.println();
}

注意,递归方法只需要一个参数;让递归在返回 达到基本情况 (n &lt;= 0) 时打印正确数量的字符。

正如 cmets 中提到的,最好在方法内返回 String 或打印 String,但不要混合使用两种方法(我选择了后者)。此外,为可重用的代码定义辅助方法是一种很好的做法,例如我的解决方案中的 printChar

【讨论】:

    【解决方案2】:

    这似乎是一个有问题的陈述:

    n != 0
    

    如果n = -1 怎么办?您的循环将无休止地继续。尝试使用n &gt; 0

    【讨论】:

      猜你喜欢
      • 2021-02-12
      • 2022-12-20
      • 2023-04-09
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2020-05-14
      • 2016-08-23
      相关资源
      最近更新 更多