#java #recursion #for-loop #while-loop
#java #рекурсия #for-цикл #цикл while
Вопрос:
public class For {
public static void main(String[] args){
for(int i=2; i<=1024; i *= 2){
System.out.println("Count is: " i);
}
}
public class While {
public static void main(String[] args){
int i = 1;
while (i < 1024) {
i *= 2;
System.out.println("Count is: " i);
}
}
public class DoWhile {
public static void main(String[] args){
int i = 1;
if (i < 1024) {
do { i*=2;
System.out.println("Count is: " i);
} while (i < 1024);
}
}
Как бы преобразовать цикл for / while, чтобы он выполнял то же самое, но с использованием рекурсивной функции?
Комментарии:
1. Пожалуйста, отметьте это также как домашнее задание, если оно одно
2. Если это домашнее задание, пожалуйста, укажите это, добавив тег homework.
Ответ №1:
Вот так:
public class Recursive {
public void r(int i) {
if (i < 1024) {
i *= 2;
System.out.println("Count is: " i);
r(i);
}
}
public static void main(String[] args) {
Recursive r = new Recursive();
r.r(1);
}
}
Комментарии:
1. -1 за то, что не помог. Предоставление студентам возможности решить поставленную задачу полезно, а подавать им решение на серебряном подносе — нет, ИМХО. Почему Manpreet Pangli должен когда-либо заботиться о том, чтобы слушать своего профессора, когда получить ответ от SO так дешево?
2. Это приводит к результатам, отличным от примеров в вопросе OPs. Ваша программа начинает печать с 1. Умножение на 2 должно быть выполнено перед println.
3. @Ingo: Я не знал, что это домашнее задание. Нет тега homework. Я думаю, что несправедливо давать ответы -1 не потому, что они неправильные, а потому, что они были даны для «вопросов домашнего задания».
4. @Ingo: с вашей точкой зрения трудно поспорить, хотя она немного субъективна!
5. Да, @David, я забочусь о программистах следующего поколения, даже если они из Индии. И я не могу этого вынести, если людям сойдет с рук избегание мышления.
Ответ №2:
Возьмите цикл main
и поместите его в его собственную функцию с аргументом int i
. В этой функции перепишите цикл на
- Если условие цикла равно false (
i >= 1024
), тоreturn
- Иначе, рекурсивный вызов с аргументом
i*2
.
Вызовите функцию с аргументом 1
или 2
, в зависимости от того, какую из ваших программ вы переписываете (они не полностью совпадают).
Ответ №3:
Рекуррентный цикл может выглядеть следующим образом:
class Main
{
public static void main(String[] args){
RecWhile(1);
}
public static void RecWhile(int i) {
if (i < 1024) {
i = i*2;
System.out.println("Count is: " i);
RecWhile(i);
}
}
}
Комментарии:
1. Этот ответ отмечен -1 не потому, что он неверен, а ПОТОМУ, что он был дан на вопрос, на который не предполагалось отвечать таким образом (конечно, это не мой POV; но так оно и есть в Stack Overflow)
2. Нет, это я, не ТАК. Если вы не видите, что это может быть только домашним заданием, я ничего не могу с этим поделать.
Ответ №4:
открытый класс Test1 {
public static void main(String[] args) {
Test1 mainFunc = new Test1();
int[] arr = {1,2,4,3,5,6};
int start=0;
int end=arr.length;
mainFunc.callRecursiveFun(start, end, arr);
}
public int callRecursiveFun(int start, int end, int[] arr) {
int arrLen = end;
if(arrLen == 0) {
return 0;
} else {
System.out.println("Loop Index at " start ": " arr[start]);
}
return callRecursiveFun(start 1, end-1, arr);
}
}