【问题标题】:Java recursion to output number patternJava递归输出数字模式
【发布时间】:2015-02-20 15:20:56
【问题描述】:

需要的输出:

    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,我该如何处理这个问题? 我的代码更多是为了证明我正在做的说明。

【问题讨论】:

    标签: java recursion


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      我认为只是通过参数传递 num 和前一个字符串(即上一行):

      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);
      
      }
      

      【讨论】:

      • 您正在调用您尚未定义的方法 numberTree - 我假设这是一个错字(应该是 meth 或反之亦然)?
      • 是的,没错,我的错。现在错误已修复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2020-02-26
      • 1970-01-01
      • 2017-09-07
      • 2021-12-30
      • 2021-12-13
      相关资源
      最近更新 更多