JavaScript Inverted Triangle Star Pattern (Right-Angled)
Beginner
6 min read
Updated: Sep 2026
3 programs
Live preview
Definition
What Is This Pattern?
An inverted right-angled triangle star pattern prints a left-aligned upside-down staircase of * characters: the first row has rows stars, and each next row has one fewer down to 1.
Remember
Rule: on outer value i, print i stars (i counts down)
*****
****
***
**
* ← 5 rows
In JavaScript you solve it with two nested for loops: the outer loop counts from rows down to 1, the inner loop appends stars with line += "*", then console.log(line) moves to the next line. It is the mirror of Program 1 — same inner loop, reversed outer direction.
Approach
How to Solve It
Two ways to emit the same shape — start with a countdown outer loop, then optionally use a forward formula or "*".repeat(i).
Method
Idea
Best for
Countdown outer
i = rows..1, inner appends i stars via line += "*"
Learning, interviews, clearest invert of Program 1
Forward + formula
i = 1..rows, append rows - i + 1 stars
When you prefer ascending counters
"*".repeat(i)
Build a whole row in one call while counting down
Shorter demos once loops click
Pseudocode
Pseudocode
for i from rows down to 1:
line = ""
for j from 1 to i:
line += "*"
console.log(line)
Change the row count and the inverted triangle updates instantly — including the triangular star total.
Whole numbers from 1 to 20. Tap a chip or type a value — the preview redraws as you go. The first line has that many stars.
Live result5 rows · 15 stars
*****
****
***
**
*
Trace
Worked Walkthrough — rows = 4
Trace each outer-loop value of i as it counts down, and count how many times the inner loop runs.
i
Inner j
Printed row
Stars
4
1..4
****
4
3
1..3
***
3
2
1..2
**
2
1
1..1
*
1
Total star prints: 4 + 3 + 2 + 1 = 10 = 4×5/2. Same triangular sum as Program 1 — time is still O(n²).
Code
JavaScript Programs
Three complete programs: fixed rows (countdown), prompt input, and a "*".repeat(i) shortcut. Use View Output for sample results, or Try It Yourself to edit and run in the playground.
Example 1 — Fixed rows = 5
Hard-coded height with a countdown outer loop — the clearest invert of Program 1.
JavaScript
let rows = 5;
for (let i = rows; i >= 1; i--) {
let line = "";
for (let j = 1; j <= i; j++) {
line += "*";
}
console.log(line);
}
1. Set height.rows = 5 means the triangle has five lines; the first line has five stars.
2. Outer loop counts down.i runs from rows down to 1. Start each row with an empty line.
3. Inner loop appends stars. For each i, j runs from 1 to i, so the current row gets exactly i stars via line += "*".
4. Break the line.console.log(line) after the inner loop starts the next (shorter) row.
When i = 5 you get *****; when i = 4 you get ****; and so on down to one star.
Example 2 — User Input Version
Read the row count at runtime with prompt. Validate with parseInt before looping.
JavaScript
let rows = parseInt(prompt("Enter the number of rows:"), 10);
if (!Number.isFinite(rows) || rows < 1) {
console.log("Please enter a whole number of rows >= 1.");
} else {
for (let i = rows; i >= 1; i--) {
let line = "";
for (let j = 1; j <= i; j++) {
line += "*";
}
console.log(line);
}
}
1. One outer loop. Still walk i from rows down to 1.
2. Build the row."*".repeat(i) creates a string of length i filled with stars.
3. Print and advance.console.log prints that string and ends the line.
Learn the two-loop version first (Examples 1–2) so you can explain both bounds in an interview; treat this as a polish shortcut afterward.
Edge Cases & Pitfalls
Check these before calling the solution done.
Wrong direction
Upright instead of inverted
If you use i = 1..rows instead of i = rows..1, you get Program 1’s growing triangle. For the inverted shape, count down — or use rows - i + 1 stars with a forward loop.
log inside
Column of stars
If console.log is inside the inner loop, each star lands on its own line. Append with +=; call console.log only after the inner loop.
j <= rows
Rectangle, not triangle
Inner bound must be j <= i (or j <= rows - i + 1). j <= rows prints a filled rectangle.
Reuse line
Growing leftovers
Reset line = "" at the start of each outer iteration, or stars from previous rows stick around.
rows = 1
Single star
Output is just * on one line — a good sanity check (same as Program 1).
NaN input
Validate parseInt
Letters or empty prompt yield NaN — check Number.isFinite(rows) && rows >= 1.
Analysis
Time and Space Complexity
Program
Time
Extra space
Nested loops (Examples 1–2)
O(rows²)
O(rows) for the current line string
"*".repeat(i) (Example 3)
O(rows²)
O(rows) per temporary row string
Total stars printed = n + (n-1) + … + 1 = n(n+1)/2, which is still quadratic in n — identical to Program 1.
Remember
Key Takeaways
Rule: outer value i prints exactly i stars, with i counting from rows down to 1.
Same as Program 1: only the outer loop direction changes; the inner star loop stays j = 1..i.
Break the row: call console.log(line) only after the inner loop.
Complexity:O(n²) time from the triangular star count.
One line: for i from rows down to 1, append i stars, then console.log.
Frequently Asked Questions
The outer loop runs i from rows down to 1. For each i, the inner loop appends i stars. The first output line uses i equal to rows so it is the longest; each later line has a smaller i, so the triangle points downward.
Program 1 uses for (i = 1; i <= rows; i++) so stars grow. This program uses for (i = rows; i >= 1; i--) so stars shrink. The inner loop still runs j from 1 to i.
Yes. Use for (i = 1; i <= rows; i++) and append (rows - i + 1) stars in the inner loop. Both styles produce the same shape.
line += "*" stays on the same row with no newline between stars. console.log(line) ends the row after the inner loop finishes.
O(n²) for n rows. Total stars are still n(n+1)/2, same as the upright triangle.
Yes. console.log("*".repeat(i)) prints a full row in one call while i counts down.
Use parseInt(prompt(...), 10) and check Number.isFinite(rows) && rows >= 1 so bad input does not produce NaN rows.
The outer loop never runs, so nothing is printed. Validate and prompt again if you want a clear user message.
🤔
Did you know?
This inverted triangle uses the same inner loop as Program 1 — only the outer loop direction changes. Total stars stay n(n+1)/2, so complexity is still O(n²).