2013-11-25 2 views
2

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

В принципе, вы должны нарисовать фрактальное дерево ascii (составленное из буквы 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__________________________________________________ 

Если кто-то может дать мне толчок в правильном направлении, это было бы весьма признателен ,

+0

Ваша картина не соответствует вашему описанию. Вы можете повторить проблему, так как каждая последующая строка имеет половину числа символов Y. Ваша первая строка будет содержать 32 символа Y, разделенные пробелом. Ваша следующая строка будет иметь 16 символов Y, между символами Y в первой строке. Вы можете выяснить остальное. –

+0

Поднимаясь вверх, количество Ys удваивается, но я перефразировал вопрос, так как он будет сгенерирован вниз в любом случае. –

+0

Я полагаю, вам нужно создать точное изображение, можете ли вы сказать, какой размер изображения: строки x cols? – Pandrei

ответ

4

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

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

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

E.g. Y02 & Y12 - 2 линии, чтобы сформировать ветви и 2 линии, чтобы сформировать ствол

1---1 
1-1 
    1 
    1 

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

EDIT: Давайте предположим, что у вас есть рисунок, сохраненный в матрице 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, если хотите.

+0

лично я начал бы с самого начала работу, идущую вверх; но это только вопрос предпочтения. – Pandrei

+0

Я думаю, даже зная строение изображения, у меня возникают проблемы с его выходом на рекурсивный шаг и базовый случай. –

+0

Я как бы понимаю, что вы говорите, за исключением того, что я не могу объявить переменные по причине вызова, поэтому матрицы находятся вне таблицы. Я должен нарисовать всю структуру –

Смежные вопросы