我想知道递归方法如何工作来打印由具有给定“宽度”输入数字的较小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
答案 0 :(得分:1)
有效的递归方法应该有两个部分。
您有一个递归调用,但不是终止条件。因此,在填充整个堆栈并导致异常之前,您的递归不会停止。因此,您应该在递归方法中包含终止条件。
示例实现可能如下所示。
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