Изменить цикл на рекурсивный метод

#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);
        }
}