Рекурсивный рисунок

Я понимаю основы рекурсии, но когда я сталкиваюсь с такой проблемой, как эта, от hackerrank. Я быстро запутываюсь относительно того, как приблизиться к этому.

В основном вы должны нарисовать фрактальное дерево аськи (составленное из буквы Y), каждый слой, идущий вниз, делит вдвое меньше Ys. Кажется, я не могу обойти базовый шаг, чтобы обобщить его на другие слои, как показано ниже:

____________________________________________________________________________________________________
__________________1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1___________________
___________________1___1___1___1___1___1___1___1___1___1___1___1___1___1___1___1____________________
___________________1___1___1___1___1___1___1___1___1___1___1___1___1___1___1___1____________________
____________________1_1_____1_1_____1_1_____1_1_____1_1_____1_1_____1_1_____1_1_____________________
_____________________1_______1_______1_______1_______1_______1_______1_______1______________________
_____________________1_______1_______1_______1_______1_______1_______1_______1______________________
_____________________1_______1_______1_______1_______1_______1_______1_______1______________________
______________________1_____1_________1_____1_________1_____1_________1_____1_______________________
_______________________1___1___________1___1___________1___1___________1___1________________________
________________________1_1_____________1_1_____________1_1_____________1_1_________________________
_________________________1_______________1_______________1_______________1__________________________
_________________________1_______________1_______________1_______________1__________________________
_________________________1_______________1_______________1_______________1__________________________
_________________________1_______________1_______________1_______________1__________________________
_________________________1_______________1_______________1_______________1__________________________
__________________________1_____________1_________________1_____________1___________________________
___________________________1___________1___________________1___________1____________________________
____________________________1_________1_____________________1_________1_____________________________
_____________________________1_______1_______________________1_______1______________________________
______________________________1_____1_________________________1_____1_______________________________
_______________________________1___1___________________________1___1________________________________
________________________________1_1_____________________________1_1_________________________________
_________________________________1_______________________________1__________________________________
_________________________________1_______________________________1__________________________________
_________________________________1_______________________________1__________________________________
_________________________________1_______________________________1__________________________________
_________________________________1_______________________________1__________________________________
_________________________________1_______________________________1__________________________________
_________________________________1_______________________________1__________________________________
_________________________________1_______________________________1__________________________________
_________________________________1_______________________________1__________________________________
__________________________________1_____________________________1___________________________________
___________________________________1___________________________1____________________________________
____________________________________1_________________________1_____________________________________
_____________________________________1_______________________1______________________________________
______________________________________1_____________________1_______________________________________
_______________________________________1___________________1________________________________________
________________________________________1_________________1_________________________________________
_________________________________________1_______________1__________________________________________
__________________________________________1_____________1___________________________________________
___________________________________________1___________1____________________________________________
____________________________________________1_________1_____________________________________________
_____________________________________________1_______1______________________________________________
______________________________________________1_____1_______________________________________________
_______________________________________________1___1________________________________________________
________________________________________________1_1_________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________
_________________________________________________1__________________________________________________

Если бы кто-нибудь мог дать мне толчок в правильном направлении, это было бы очень ценно.

1 ответ

Решение

Изображение структурировано следующим образом:

   Y01
   Y11
---------
   Y02
   Y12
---------
   Y04
   Y14
---------
   Y08
   Y18
---------
   Y016
   Y116

Y0x и Y1x для буквы Y: Y0x - ветви, а Y1x - усечение; х - это число, если для формирования буквы необходимы строки

Например, Y02 и Y12 - 2 линии для формирования ветвей и 2 линии для формирования ствола

1---1
 1-1
  1
  1 

Вы можете заметить, что есть еще одно "правило": когда вы начинаете рисовать новые буквы (например, переходите от Yx2 к Yx3), вы копируете последнюю строку.

РЕДАКТИРОВАТЬ: Давайте предположим, что вы сохранили рисунок в матрице char P[63][100]Я бы написал 2 функции (не оптимальный подход, но вы можете оптимизировать его) - drawY - рисует буквы Y в соответствии с входными данными - drawPicutre - рисует "слои" Y

drawY(int startPos, int stopPos, int*line, int lvl, int count)
{
   if(lvl>=count)
   {
     P[*line][(startPos+(stopPos-startPos))/2] = '1';
     P[*line + lvl][(startPos+(stopPos-startPos))/2 +count] = '1';
     P[*line + lvl][(startPos+(stopPos-startPos))/2 -count] = '1';
     (*line)--;
     drawY(startPos,stopPos,line,lvl,count+1);
   }

}

int line=63;
drawY(0,100, &line, 16, 1); // draws the first, and largest Y

Вам просто нужно реализовать вторую функцию drawPicture(...), которая вызывает drawY. Вы можете изменить drawY, если хотите.

Другие вопросы по тегам