Java递归到输出数字模式

时间:2015-02-20 15:20:56

标签: java recursion

必需的输出:

    5
   454
  34543
 2345432
123454321

如何使用递归来完成此操作?我有代码的想法:

public static void main(String[] args)
{
      System.out.println(func(5)); 
}
public static String func(int num)
{
     return num + "" +meth(num-1, num, num-1);
}

public static String meth(int start, int num, int end)
{

    if(start==1)
    {
        return "1";
    }
    System.out.println(start+num+end);

    return meth(start-1, num, end-1);
}

我对在if语句和System.out.println()中返回的内容感到困惑, 因为数字5不会减少/增加,因为它将保持不变,它将垂直保持5,我该如何处理这个问题? 我的代码更像是一个例证,只是为了证明我在做这件事。

2 个答案:

答案 0 :(得分:2)

也许这就是你要找的东西:

public class Main {
    public static void main(String[] args) {
        startRecursion(5);
    }

    private static void startRecursion(int number) {
        String aligner = "";
        for (int i = 0; i < number - 1; i++) {
            aligner += " ";
        }
        recursion(String.valueOf(number), number, number, aligner);
    }

    private static void recursion(String value, int startNumber, int lastNumber, String aligner) {
        if (lastNumber < 1) {
            return;
        }

        if (lastNumber != startNumber) {
            value = lastNumber + value + lastNumber;
        }

        System.out.println(aligner + value);

        if (!aligner.isEmpty()) {
            aligner = aligner.substring(0, aligner.length() - 1);
        }

        recursion(value, startNumber, lastNumber - 1, aligner);
    }
}

打印:

    5
   454
  34543
 2345432
123454321

答案 1 :(得分:0)

我认为只需传递num by参数和前一个String(前一行):

private static String meth(int num,String previous) {

     String space="";
    for(int i=0; i<num; i++) space+=" ";
    //If number is negative, return empty String
    if(num<=0) return "";

    //if number is 1, we need to check if previous string is empty or not, because if is empty we need then umber only once, otherwise we need to add to the string
    else if(num==1){
        if(!previous.isEmpty()) return space+num+previous+num;
        else return space+num+"";
    }

    //Here is checked if previous is empty and we do the same as before with number one
    String currentRow=previous.isEmpty()? String.valueOf(num) : num+previous+num;

    //We return the current row (with the current number), and we add the next row (or tree level) passing the number-1 and the row we have
    return space+currentRow+"\n"+meth(num-1,currentRow);

}