我练习了两次写一个函数,一次递归,一次迭代,这将产生以下输出:
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();
}
迭代方式非常简单,但我不知道如何将其作为递归调用来处理。
有关如何解决此问题的任何提示?
编辑:方法签名由于单元测试而得以修复
答案 0 :(得分:4)
您的代码应如下所示
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);
}
输出:
1
12
123
1234
12345
1234
123
12
1
这是如何工作的我们将字符串存储在我们想要打印的变量中,但是我们继续调用函数并增加字符串,迭代次数不到一半。然后一旦它达到一半就开始返回堆栈跟踪,这样它就会按递减顺序给出返回输出。
正如pshemo所说,修改了一些代码以完全没有循环:
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);
}
输出:
1
12
123
1234
12345
1234
123
12
1
替代方式:
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);
}
}
}
输出:
1
12
123
1234
12345
123456
1234567
12345678
123456789
12345678910
123456789
12345678
1234567
123456
12345
1234
123
12
1
答案 1 :(得分:1)
提示:您的主要递归方法看起来像
void recursiveMethod(int iter, int max){
if iteration<max
print 1..iter
recursiveMethod(iter+1, max)
print 1..iter
else
print 1..iter
}
您可以编写额外的递归方法来处理范围1..n
print 1..iter
recursiveMethod(iter+1, max)
print 1..iter
应该处理打印
1
..
1
但也会调用recursiveMethod(iter+1, max)
来填充..
部分
12
..
12
等等,直到我们需要打印的iteration==max
123..max