2013-11-25 47 views
2

我理解递归的基础知识,但是当我遇到来自hackerrank的this one这样的问题时。我很快就对如何处理它感到困惑。递归图

基本上你必须绘制一个分形的ascii树(由字母Y组成),每层向下减半的Y数。我似乎无法让我的周围基本步头,我可以把它推广到其他层,如下图所示:

____________________________________________________________________________________________________ 
__________________1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1___________________ 
___________________1___1___1___1___1___1___1___1___1___1___1___1___1___1___1___1____________________ 
___________________1___1___1___1___1___1___1___1___1___1___1___1___1___1___1___1____________________ 
____________________1_1_____1_1_____1_1_____1_1_____1_1_____1_1_____1_1_____1_1_____________________ 
_____________________1_______1_______1_______1_______1_______1_______1_______1______________________ 
_____________________1_______1_______1_______1_______1_______1_______1_______1______________________ 
_____________________1_______1_______1_______1_______1_______1_______1_______1______________________ 
______________________1_____1_________1_____1_________1_____1_________1_____1_______________________ 
_______________________1___1___________1___1___________1___1___________1___1________________________ 
________________________1_1_____________1_1_____________1_1_____________1_1_________________________ 
_________________________1_______________1_______________1_______________1__________________________ 
_________________________1_______________1_______________1_______________1__________________________ 
_________________________1_______________1_______________1_______________1__________________________ 
_________________________1_______________1_______________1_______________1__________________________ 
_________________________1_______________1_______________1_______________1__________________________ 
__________________________1_____________1_________________1_____________1___________________________ 
___________________________1___________1___________________1___________1____________________________ 
____________________________1_________1_____________________1_________1_____________________________ 
_____________________________1_______1_______________________1_______1______________________________ 
______________________________1_____1_________________________1_____1_______________________________ 
_______________________________1___1___________________________1___1________________________________ 
________________________________1_1_____________________________1_1_________________________________ 
_________________________________1_______________________________1__________________________________ 
_________________________________1_______________________________1__________________________________ 
_________________________________1_______________________________1__________________________________ 
_________________________________1_______________________________1__________________________________ 
_________________________________1_______________________________1__________________________________ 
_________________________________1_______________________________1__________________________________ 
_________________________________1_______________________________1__________________________________ 
_________________________________1_______________________________1__________________________________ 
_________________________________1_______________________________1__________________________________ 
__________________________________1_____________________________1___________________________________ 
___________________________________1___________________________1____________________________________ 
____________________________________1_________________________1_____________________________________ 
_____________________________________1_______________________1______________________________________ 
______________________________________1_____________________1_______________________________________ 
_______________________________________1___________________1________________________________________ 
________________________________________1_________________1_________________________________________ 
_________________________________________1_______________1__________________________________________ 
__________________________________________1_____________1___________________________________________ 
___________________________________________1___________1____________________________________________ 
____________________________________________1_________1_____________________________________________ 
_____________________________________________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

我想你需要生成确切的图像,你能说图像的大小:lines x cols? – Pandrei

回答

4

图像被以下列方式构造:

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

Y0x & Y1X用于字母Y:Y0x是枝条和Y1X是将trunc; x是形成字母所需的线的数量

例如, 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。

+0

个人我会从底部开始工作我的方式;但这只是一个偏好问题。 – Pandrei

+0

我想,即使知道图像的结构,我很难将其分解为递归步骤和基本情况。 –

+0

我有点得到你在说什么,除了我无法通过挑战的优点来声明变量,所以矩阵不在表格中。我很好地画出了整个结构 –