递归方法如何打印shap


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

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

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

XX X XX 

我试着解决这个问题,但我不能在这里帮助我..在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时,他打印出来

  XX XX XXXXX 

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

  1. 递归调用(调用自己做部分工作)
  2. 终止条件(停止递归的条件)

您有一个递归调用,但不是终止条件。 因此,在填充整个堆栈并导致exception之前,您的递归不会停止。 因此,您应该在递归方法中包含终止条件。

示例实现可能如下所示。

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

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

 import java.util.*; import java.lang.*; import java.io.*; public class Main { public static void main (String[] args) throws java.lang.Exception { List ans = new ArrayList(); 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 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