Ваш код должен выглядеть следующим образом
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
Как это работает это мы сохраняем строку в переменной, которую мы хотим напечатать, но мы продолжаем вызывать функцию и увеличивать строку, итерация меньше половины. то, как только он достигает половины, он начинает возвращать трассировку стека, поэтому дает нам обратный выход в порядке убывания.
Edit:
По словам pshemo изменил код немного, чтобы иметь абсолютно никаких Loops:
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
Вы может создавать два рекурсивных метода: один для печати чисел в одной строке, второй - для рекурсивной печати первой и последней строк (в зависимости от ввода). – Pshemo
Подсказка: вы хотите напечатать первую строку, вызвать подпрограмму, чтобы заполнить ее в середине, а затем распечатать последнюю строку. Затем подпрограмма становится точно такой же, как основной метод. – Ordous
Это домашнее задание? – amphetamachine