递归方法如何打印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
有效的递归方法应该有两个部分。
- 递归调用(调用自己做部分工作)
- 终止条件(停止递归的条件)
您有一个递归调用,但不是终止条件。 因此,在填充整个堆栈并导致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