Suppose you are building a program which draws several stars on the console. On
ID: 3691702 • Letter: S
Question
Suppose you are building a program which draws several stars on the console. On the first three lines, there should be 1, 2, and 3 stars, respectively. On all subsequent lines, the number of stars should either be twice the number of stars 2/3 of the way up the screen, for lines numbers that are exact multiples of three, or otherwise 2 more than the preceding line. Write a recursive definition for the number of stars on each line.
Then, implement the recursive function from above, add a method to draw any number of stars (that can be iterative, i.e. using a loop, or it can be recursive), and call it enough times print stars on 54 lines.
The first few lines should look like this:
Explanation / Answer
Solution:
1. Recursive definition:
----------------------------------------------------
if lineNumber==1 numberOfStars = 1
if lineNumber==2 numberOfStars = 2
if lineNumber == 3 numberOfStars = 3
if lineNumber > 3 and lineNumber%3 == 0
totalStars=0
totalStars=totalStars+calculateStarsForLine(lineNumber-1)
numberOfStars=2*2/3*totalStars;
else numberOfStars= calculateStarsForLine(lineNumber-1)+2;
------------------------------------------------------------
2. Recursive function:
----------------------------------------------------------
int calculateStarsForLine(int lineNumber)
{
int numberOfStars=0;
if(lineNumber<=0)
return numberOfStars;
if(lineNumber==1)
numberOfStars = 1;
else if(lineNumber==2)
numberOfStars = 2;
else if(lineNumber==3)
numberOfStars = 3;
else if(lineNumber > 3)
{
if(lineNumber%3==0)
{
int totalStars=0;
totalStars+=calculateStarsForLine(lineNumber-1);
//System.out.println("total stars:"+totalStars);
numberOfStars=(int)(2*2/3*totalStars);
}
else
{
numberOfStars= calculateStarsForLine(lineNumber-1)+2;
}
}
return numberOfStars;
}
---------------------------------------------------
3. Complete program:
-----------------------------------------------------
public class Stars {
int calculateStarsForLine(int lineNumber)
{
int numberOfStars=0;
if(lineNumber<=0)
return numberOfStars;
if(lineNumber==1)
numberOfStars = 1;
else if(lineNumber==2)
numberOfStars = 2;
else if(lineNumber==3)
numberOfStars = 3;
else if(lineNumber > 3)
{
if(lineNumber%3==0)
{
int totalStars=0;
totalStars+=calculateStarsForLine(lineNumber-1);
//System.out.println("total stars:"+totalStars);
numberOfStars=(int)(2*2/3*totalStars);
}
else
{
numberOfStars= calculateStarsForLine(lineNumber-1)+2;
}
}
return numberOfStars;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
char star='*';
int lines=54;
Stars stars=new Stars();
int previousLine=0,numberOfStars=0;
for(int i=1;i<=lines;i++)
{
//System.out.println("line:"+i);
numberOfStars=stars.calculateStarsForLine(i);
//System.out.println("Number of stars:"+numberOfStars);
for(int j=1;j<=numberOfStars;j++)
{
System.out.print(star);
}
System.out.print(" ");
/*previousLine++;
//int numberOfStars=0;
if(i<=3)
{
numberOfStars=i;
for(int j=1;j<=numberOfStars;j++)
{
System.out.print(star);
}
}
else
{
if((i>3) && (i%3==0))
{
numberOfStars=numberOfStars*2;
for(int j=1;j<=numberOfStars;j++)
{
System.out.print(star);
}
}
else
{
numberOfStars=numberOfStars+2;
for(int j=1;j<=numberOfStars;j++)
{
System.out.print(star);
}
}
}
System.out.print(" ");*/
}
}
}
----------------------------------------------------------------------------