Я пытаюсь понять этот рекурсивный метод, но даже с отладчиком я не мог придумать что-то, что имеет смысл для меня, поэтому я надеюсь, что кто-то здесь мотивирован, чтобы объяснить мне, что здесь происходит. Я знаю, как рекурсия работает в основном, но способ записи этого метода беспокоит меня. Я знаю условный оператор в java, и я разработал новый код, но все же я его не понимаю, так что я ожидаю здесь.Результат рекурсивного метода
Каков результат для m (5) И m (15). Как вы его вычислили? Спасибо
Редактировать после ответов. Я сделал таблицу с моими результатами для будущих читателей
m(n)::|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|...
result|0|0|1|1|1|2|3|4|6|9|13|19|28|41|60|88|...
я проверил только результат 15 с моей программой.
public class practice {
/**
* Try to understand the way this works
* @param n
* @return
*/
static long m(long n) {
return n <= 1 ? 0 : n == 2 ? 1 : m(n - 1) + m(n - 3);
}
/**
* This is what i tried so far.
* @param n
* @return
*/
static long ma(long n) {
System.out.println("Method called");
System.out.println("N is: " + n);
if (n <= 1) {
System.out.println("N<=1: " + n);
System.out.println("0 is returned");
return 0;
} else if (n == 2) {
System.out.println("N==2: " + n);
System.out.println("1 is returned");
return 1;
} else {
System.out.println("Inside ELSE, N is: " + n);
return ma(n - 1) + ma(n - 3);
}
}
public static void main(String[] args) {
ma(15);
}
}
Что вы понимаете рекурсией? –
Здравствуйте, я думал, что мой код очень хорошо объясняет проблему, и если бы я не добавил текст, а ответил на ваш вопрос. Лично я считаю, что рекурсия - это способ в java для реализации «for-loops», но по-другому. Вы называете себя снова и снова, пока не дойдете до основания. Это происходит аналогично, но в отличие от forloop (где «магия» происходит автоматически), вызывая ваш метод внутри метода. Если вы посмотрите на код моего проф, первые строки кода показывают это. m (n - 1) + m (n - 3) << рекурсия. но я застрял с (рекурсия + рекурсия). Надеюсь, это ответит на ваш вопрос. –