Also you could do it with just one for loop
: if you can calculate the total number of stars from limit, and where to place line breaks, you could do something like:
for (int star=??; ??; ??)
So what this does is to print stars in a single loop, and the if statement just works out where to place the line breaks.
But it depends what your goal is. You mention number of for loops and efficiency, but what is your definition of efficiency - is it having the least number of for loops, or is it displaying the pattern in the smallest time? Generally you can make code faster OR smaller, but not both, and part of software engineering is determining where to make the trade-off.
So if your goal is minimum time, this example probably isn't very good because the if expression is recalculated every time round the loop, whereas if you use more, simpler code then it can zip through that more quickly.