Java 将迭代循环转换为递归方法
我得到了两次编写函数的练习,一次递归,一次迭代,这将产生以下输出:Java 将迭代循环转换为递归方法,java,recursion,iteration,Java,Recursion,Iteration,我得到了两次编写函数的练习,一次递归,一次迭代,这将产生以下输出: private static void printSequence(int n) printSequence(3); 1 12 123 12 1 我的迭代解决方案如下: for (int i = 1; i < 2 * n; i++) { for (int j = 1; j <= (i > n ? 2 * n - i : i); j++) { System.out.print(j);
private static void printSequence(int n)
printSequence(3);
1
12
123
12
1
我的迭代解决方案如下:
for (int i = 1; i < 2 * n; i++) {
for (int j = 1; j <= (i > n ? 2 * n - i : i); j++) {
System.out.print(j);
}
System.out.println();
}
for(int i=1;i<2*n;i++){
对于(intj=1;jn?2*n-i:i);j++){
系统输出打印(j);
}
System.out.println();
}
迭代方法非常简单,但我不知道如何将其作为递归调用处理
关于如何解决这个问题有什么建议吗
编辑:由于单元测试,方法签名是固定的您的代码应该如下所示
public static void main(String[] args) {
recusiveFunction(1,10); // First parameter is the iteration number and 2 is total times.
}
private static void recusiveFunction(int iteration ,int total) {
String str="";
for(int i=1;i<=iteration;i++){ // this loops creates what it needs to print 1 or 12 or 123
str+=i;
}
if(iteration<total/2){
System.out.println(str);
recusiveFunction(++iteration,total);
}
System.out.println(str);
}
它的工作原理是,我们将字符串存储在一个我们想要打印的变量中,但我们一直在调用函数,并且当迭代少于一半时,字符串将递增。然后,当它达到一半时,它开始返回堆栈跟踪,因此它以递减的顺序给我们返回输出
编辑: 正如上面所说,我们稍微修改了代码,使其完全没有循环:
public static void main(String[] args) {
recusiveFunction(1,10,"");
}
private static void recusiveFunction(int iteration ,int total, String str) {
str+=iteration;
if(iteration<total/2){
System.out.println(str);
recusiveFunction(++iteration,total,str);
}
System.out.println(str);
}
替代方法:
public class Main {
private static int iteration=1;
private static String str ="";
public static void main(String[] args) {
printSequence(10);
}
private static void printSequence(int total) {
if(iteration<=total){
str+=iteration;
System.out.println(str);
iteration++;
printSequence(total);
}
if(2*total - iteration >0) {
str = str.substring(0, 2 * total - iteration);
iteration++;
System.out.println(str);
}
}
}
提示:您的主要递归方法如下所示
void recursiveMethod(int iter, int max){
if iteration<max
print 1..iter
recursiveMethod(iter+1, max)
print 1..iter
else
print 1..iter
}
我们应该处理打印
1
..
1
但也将调用递归方法(iter+1,max),该方法将填充。
部分
12
..
12
以此类推,直到我们只需要打印的情况下,iteration==max
123..max
您可以创建两种递归方法,一种是在一行中打印数字,另一种是递归打印第一行和最后一行(取决于输入)。提示:要打印第一行,调用子程序填写中间,然后打印最后一行。然后,子例程与主方法完全相同。您正在使用循环。我想说,这个练习的目的是学习将循环重写为递归方法。@Pshemo该循环仅用于构造要显示的字符串。因此,将其重写为递归方法应该相当容易:)方法签名是固定的,它通过某种单元测试框架进行测试,因此我无法更改它。。。私有静态void printSequence(intn)无论如何,我不希望在您的答案中包含它,以避免发布现成的解决方案。最好将其隐藏为注释,让其他人自己花一些时间来改进甚至重写您的答案(我认为这是一个很好的练习)。这是我解决问题的方法,但我无法向方法签名添加参数,因为单元测试会检查我的答案code@chamm就像我在书中说的,您只需在具有固定签名的方法中调用此递归方法。只需在开始时将
iter
设置为1
,并让max
ben
。换句话说,使用private static void printSequence(int n){recursiveMethod(1,n);}
print 1..iter
recursiveMethod(iter+1, max)
print 1..iter
1
..
1
12
..
12
123..max