start
and end
are inclusive and the ratio between two terms is step
.
Returns an error if step
equals 1
.Array.from()
, Math.log()
and Math.floor()
to create an array of the desired length, Array.prototype.map()
to fill with the desired values in a range.start
, to use a default value of 1
.step
, to use a default value of 2
.const geometricProgression = (end, start = 1, step = 2) =>
Array.from({
length: Math.floor(Math.log(end / start) / Math.log(step)) + 1,
}).map((_, i) => start * step ** i);
geometricProgression(256); // [1, 2, 4, 8, 16, 32, 64, 128, 256]
geometricProgression(256, 3); // [3, 6, 12, 24, 48, 96, 192]
geometricProgression(256, 1, 4); // [1, 4, 16, 64, 256]
Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️