Нужно сделать рекурсивный метод,при вызове которого получалось бы следующее:
repeat("hello", 3) "hellohellohello"
repeat("this is fun", 1) "this is fun"
repeat("wow", 0) ""
repeat("hi ho! ", 5) "hi ho! hi ho! hi ho! hi ho! hi ho! "
Вот мой код
public class Test{
public static String repeat(String s, int n) {
String a="";
if(n < 0){
throw new IllegalArgumentException();
}
else if(n==0){
return a;
}
else {
a=a+s;
n--;
}
return repeat(a,n);
}
public static void main(String[]args){
repeat("hello", 3);
}
}
По заданию,при вводе отрицательного числа должно выбрасываться исключение,при вводе нуля метод должен возвращать пустую строку.Эти части кода работают.Не работает сама рекурсия,всегда возвращается пустая строка.Пробовал return repeat(a,n);
перенести в
else {
a=a+s;
n--;
return repeat(a,n);
}
Вывод тот же.В чём проблема?Это задание на рекурсию,через цикл нельзя сделать.
else if(n==0){
return a;
}
Когда доходит до дна рекурсии, в этот момент возвращается пустая строка. На самом деле, идея сделать tail recursion хороша, но с ограничением на только два аргумента вряд ли получится.
Поэтому придется более stack-unfriendly: в основном случае (n > 0) нужно сделать что-то вроде return s + repeat(s, n - 1);
.
как то так:
public class RecursiveHelp {
static String recursiveRepeat(String s, int n) {
if (n == 0) {
return "";
} else if (n < 0) {
throw new IllegalArgumentException("n должно быть больше 0");
}
return s + recursiveRepeat(s, --n);
}
public static void main(String[] args) {
System.out.println(recursiveRepeat("hello", 3));
System.out.println(recursiveRepeat("this is fun", 1));
System.out.println(recursiveRepeat("wow", 0));
System.out.println(recursiveRepeat("hi ho! ", 5));
}
}
У вас a
либо пуста, когда n == 0
, либо равно s
.
public class Test{
public static String repeat(String a, String sum, int n) {
if (n < 0) {
throw new IllegalArgumentException();
}
return n == 0 ? sum : repeat(a, sum + a, --n);
}
public static void main(String[]args){
System.out.println(repeat("hello", "", 3));
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Помогите разобраться в этом сложном для меня моментеУ меня есть два класса сущностей User и Hotel, у них поля long id и геттеры
Есть приложение Spring Boot, которое запускается и работает корректноНастроил его для генерации war-ника согласно документации Spring
Мой вопрос очень прост для программистов со стажемМне просто нужно, чтобы по клику менялось значение boolean с true на false и обратно