语言: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。抱歉这个巨大的帖子。
答案 0 :(得分: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);
}
}
答案 1 :(得分: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);