如何打印shap

时间:2016-03-09 11:51:04

标签: java recursion

我想知道递归方法如何工作来打印由具有给定“宽度”输入数字的较小X组成的大X,这保证是奇数。

“宽度”是沿着一条大X的X的长度(数量)。

宽度输入数X = 3的示例 该方法将打印此形状!

 X X

  X

 X X

我试图解决这个问题,但我无法解决 谁能在这里帮助我.. 在java代码中,

这是我的代码,他的工作正常,但在numberinput = 7或5

时打印错误
 public static String shape(String i,int  numberinput) {   
 //error check, not working for even numbers
 if(numberinput%2 == 0)
    return null;

 //terminating condition, stop recursion when this occurs.
 if(numberinput == 1)
    return "X";

else

return "X"+" "+i+"\n" +" "+shape(" "+i,numberinput-2)+" "+"\n"+i+" "+"X";
}

他在numberinput = 5

时打印出来
       X X

    X  X

    X 

    X X 

    X X

2 个答案:

答案 0 :(得分:1)

有效的递归方法应该有两个部分。

  1. 递归调用(调用自己做部分工作)
  2. 终止条件(停止递归的条件)
  3. 您有一个递归调用,但不是终止条件。因此,在填充整个堆栈并导致异常之前,您的递归不会停止。因此,您应该在递归方法中包含终止条件。

    示例实现可能如下所示。

    public static String shap(String i, int numberinput) {
        //error check, not working for even numbers
        if(numberinput%2 == 0)
            return null;
    
        //terminating condition, stop recursion when this occurs.
        if(numberinput == 1)
            return "X";
    
        //recursion, call recursive until terminating condition occurs.
        return "X" + i + shap(i, numberinput-2) + i + "X";
    }
    

答案 1 :(得分:0)

我编写了一个java代码,其中递归仅用于级别,生成我使用循环的字符串:

import java.util.*;
import java.lang.*;
import java.io.*;

public class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        List<String> ans = new ArrayList<String>();
        shap(7, 1, ans);
        //System.out.println(ans);
        for(int i = 0;i < ans.size();i++){
            System.out.println(ans.get(i));
        }
    }

    public static void shap(int numberinput, int currentLevel, List<String> ans) {
        if(currentLevel == numberinput+1) return;
        String val = "";
        for(int i = 1;i <= numberinput;i++){
            if(i == currentLevel || i == (numberinput+1-currentLevel)) val += "X";
            else val += " ";
        }
        ans.add(val);
        shap(numberinput, currentLevel+1, ans);//Recursion step for the levels
    }
}

指向Ideone上的解决方案:http://ideone.com/RioL9g