Как конвертировать вложенный цикл в рекурсивный - PullRequest
0 голосов
/ 12 ноября 2018

Может кто-нибудь помочь мне преобразовать этот цикл for в рекурсивный метод: Пока я добавил эти два метода, но я все еще хочу изменить второй цикл. Заранее спасибо.

       public void makeDesign1() {
    int x;
    for (int i = 0; i < 5; i++) // For loop is the one creating the rows
    {
        for (x = 4; x > i; x--) // Nested loop is the one creating the columns 
        {
            System.out.print("*");
        }
        System.out.println();
    }
    System.out.println();

}

public static int makeDesign1Recur(int i) {

    if (i == 0) {
        return 0;
    }
    System.out.print("*");
    return (makeDesign1Recur(i-1));
}
// How to convert this second loop recursive?
public static void makeDesignRow(int i){
   for ( int x = i; x>=0; x--){
       makeDesign1Recur(x);
       System.out.println("");
   }


}

1 Ответ

0 голосов
/ 12 ноября 2018

Я вижу первый шаг как правильное переопределение makeDesign1(). Мы хотим передать размер для нашего рисунка. Мы также хотим немного изменить границы, чтобы размер 1 рисовал одну звезду, а не такую, как оригинал:

public static void makeDesign(int n) 
{
    for (int i = 0; i < n; i++) // For loop is the one creating the rows
    {
        for (int x = n; x > i; x--) // Nested loop is the one creating the columns 
        {
            System.out.print("*");
        }

        System.out.println();
    }

    System.out.println();
}

Следующий шаг - заставить оба цикла считать до 1, чтобы упростить рекурсию, когда придет время:

public static void makeDesign(int n) 
{
    for (int i = n; i > 0; i--) // For loop is the one creating the rows
    {
        for (int x = i; x > 0; x--) // Nested loop is the one creating the columns 
        {
            System.out.print("*");
        }

        System.out.println();
    }

    System.out.println();
}

Теперь мы можем просто преобразовать каждый цикл в его собственную рекурсивную функцию, одну вызывая другую:

public static void makeDesign(int n) 
{
    if (n > 0)
    {
        makeDesignRow(n);
        makeDesign(n - 1);
    }
    else
    {
        System.out.println();
    }
}

public static void makeDesignRow(int x)
{
    if (x > 0)
    {
        System.out.print("*");
        makeDesignRow(x - 1);
    }
    else
    {
        System.out.println();
    }
}

OUTPUT

Передав makeDesign() аргумент 10, мы получим:

> java Main
**********
*********
********
*******
******
*****
****
***
**
*

> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...