#java #data-structures
#java #структуры данных
Вопрос:
Не могли бы вы, пожалуйста, объяснить мне, как изменить этот цикл for на рекурсивный Я знаю, что такое рекурсивный, но мне не удалось правильно напечатать количество звездочек в коде, поскольку он печатает только первую строку звездочек.
Любые рекомендации будут оценены,
Вот мой текущий код:
static void printLine(int n) {
for (int i=0; i<n; i) {
System.out.print("*");
}
System.out.println();
}
Комментарии:
1. Вопрос о домашнем задании! 🙂
2. С какой частью этого (по общему признанию, странного) требования вы боретесь? Вы понимаете, что такое рекурсивные методы? Если да, что вы пытались делать до сих пор?
3. meta.programmers.stackexchange.com/questions/6166/…
4. Вам необходимо определить базовый вариант, чтобы определить, когда рекурсивные вызовы прекращаются. Вам также необходимо определить рекурсивный случай, т. Е. Что происходит, когда это не базовый случай. В рекурсивном случае будет выведена звездочка
*
и вызванprintStars()
сlines - 1
. Базовый вариант напечатает последнюю звездочку или просто ничего не сделает, в зависимости от того, как он определен. Я не собираюсь писать код за вас. Рекурсия может быть сложной, но этот пример хорош и прост для ознакомления.5. В чем именно заключается вопрос? Чтобы напечатать n звездочек подряд? Чтобы напечатать n строк из n звездочек?
Ответ №1:
Погуглив «как преобразовать цикл for в рекурсию», есть аналогичный ответ здесь и статья с примером здесь.
Это довольно большой намек, но основная идея заключается в том, что ваши аргументы хранят текущее состояние цикла.
for (int i = 1; i <= n; i )
{
// ....
}
эквивалентно:
private static void PerformAction(int n)
{
if (n > 0)
{
// Do something
PerformAction(n - 1);
}
}
Ответ №2:
Это то, что вы должны довольно легко найти в Google, убедитесь, что вы пытаетесь найти ответ самостоятельно, прежде чем спрашивать сообщество. Я не против отвечать на подобные вопросы, но я обнаружил, что вы действительно ничему не научитесь, если сначала спросите, а потом посмотрите.
private static void printStars(int n)
{
if (n>0){
system.out.println("*");
printStars(n-1);
}
}