3

语言:Java

我遇到了应该产生以下模式的递归方法的问题:

Zigzag 1
*

Zigzag 2
*
**
 *

Zigzag 3
*
***
 *

Zigzag 4
*
**
 *
****
  *
  **
   *

Zigzag 6
*
***
 *
******
   *
   ***
    *

Zigzag 8
*
**
 *
****
  *
  **
   *
********
    *
    **
     *
    ****
      *
      **
       *

这是我到目前为止所拥有的:

public void printZigZag(int size, int indent) {
    if(size > 0 && indent >= 0){
        String temp = "";

        for(int i = 0; i < indent; i++){
            temp += " ";
        }
        for(int i = 0; i < size; i++){
            temp += "*";
        }


        printZigZag(size/2, indent);

        /* Example of something I've tried...
                    if(size != 1){
            indent++;
        }

        if(size % 2 != 0){
            indent = temp.length() - 2;
        } else {
            indent = temp.length() / 2;
        }
        */

        System.out.println(temp);
        printZigZag(size/2, ++indent);
    }
}

但是该代码会产生这个(其中 Zigzag # 是大小):

Zigzag 1
*

ZigZag 2
*
**
 *

ZigZag 3
*
***
 *

ZigZag 4
*
**
 *
****
 *
 **
  *

ZigZag 6
*
***
 *
******
 *
 ***
  *

ZigZag 8
*
**
 *
****
 *
 **
  *
********
 *
 **
  *
 ****
  *
  **
   *

我已经为此工作了几天,各种不同的 if 和语句顺序,无法弄清楚我哪里出错了。

非常感谢可以提供的任何帮助,在此先感谢您。

PS。很抱歉这个巨大的帖子。

4

2 回答 2

2

看起来递归模式是:

zigZag(1): print *
zigZag(n): zigZag(n / 2), print n times *, zigZag(n / 2)

只需注意缩进因子。尝试这个:

public class ZigZag {
    public static void main(String[] args) {
        int n = 4;

        zigZag(n, 0);
    }

    public static void zigZag(int n, int i /* indentation factor */) {
        if(n > 1)
            zigZag(n / 2, i);

        for(int k = i; k > 0; k--)
            System.out.print(" ");

        for(int k = n; k > 0; k--)
            System.out.print("*");

        System.out.println();

        if(n > 1)
            zigZag(n / 2, i + n / 2);
    }
}
于 2013-08-19T16:13:03.810 回答
1

我希望你不介意,我无法抗拒:) 这是用 JS 实现的。

function zigzag(n, pad) {
  if(n > 0) {
    zigzag(~~(n / 2), pad);
    console.log(Array(pad+1).join(" ") + Array(n+1).join("*"));
    zigzag(~~(n / 2), pad+~~(n / 2)); //~~ implicitily coerces floats to whole numbers
  }
}

zigzag(1, 0);
zigzag(2, 0);
zigzag(3, 0);
zigzag(4, 0);
于 2013-08-19T16:38:49.667 回答