Here’s my code:

```
/* function to find the sequential numbers (from
greatest to lowest) between the two given values.
With the passed values included*/
function findSeq(max, min){
var seqArr = [];
for(var i = max; i >= min; i--){
seqArr.push(i);
}
return seqArr;
}
function findSCM(n1, n2){
var bool = true;
var i = 1;
var m1 = [], m2 = [];
var sCM;
//while SCM for n1 and n2 not found
while(bool){
m1.push(n1 * i);
m2.push(n2 * i);
//check if SCM found
if(m1.indexOf(m2[i]) !== -1){
sCM = m2[i];
break;
}else if(m2.indexOf(m1[i]) !== -1){
sCM = m1[i];
break;
}
i++;
}
return sCM;
}
function smallestCommons(arr) {
//find the max, min value from arr
var max, min;
if(arr[0] > arr[1]) {
max = arr[0];
min = arr[1];
}
else if(arr[0] < arr[1]){
max = arr[1];
min = arr[0];
}
else return arr[0]; //if they're equal return one of them
arr = findSeq(max, min);
return arr.reduce(function(a, b){
return findSCM(a,b);
});
}
```

I’m getting this error: `Error: Potential infinite loop at line 20.`

I can’t think of another way to solve it, without getting into this infinite loop problem.

Any hints or suggestions?

**1. Infinite loop problem** : Argument to indexOf is ‘undefined’; thus, it won’t match with any number. As a result, it is not possible to break out from the loop.

Let,

n1 = 1

n2 = 3

By definition of SCM, we expect the correct answer to be

3

Suppose, we are on 3rd iteration just before i is incremented.

m1 = [1, 2, 3]

m2 = [3, 6, 9]

i = 3

Since i is 3, you are accessing 4th element of both arrays which is ‘undefined’.

**2. You are solving the wrong problem**

The argument passed to findSCM function represents inclusive range. If [1, 3] is given, it is asking for SCM among 1, 2, and 3.

**1. Infinite loop problem :** About this, I’m thinking of adding a second counter that starts from zero.

**2. You are solving the wrong problem:** Doesn’t `reduce()`

do this (iterating over the array, and finding the SCM of the SCM of the last two elements with the next element.

**Edit**: I added a second counter for the array elements that starts from zero and I passed the 1st 3 tests, but not the final 2 tests. I think it’s because the code is taking too long time or has too many steps.

- I don’t really get it
- If you have range function which will expand [1, 3] to [1, 2, 3].

If your code gets shut down by grader, then your algorithm is too slow.

- Here’s the updated code for the
`findSCM()`

method:

```
unction findSCM(n1, n2){
var bool = true;
var i = 1, j = 0;
var m1 = [], m2 = [];
var sCM;
//while SCM for n1 and n2 not found
while(bool){
m1.push(n1 * i);
m2.push(n2 * i);
//check if SCM found
if(m1.indexOf(m2[j]) !== -1){
sCM = m2[j];
break;
}else if(m2.indexOf(m1[j]) !== -1){
sCM = m1[j];
break;
}
i++;
j++;
}
return sCM;
}
```

2 you mean like this function (which is already in my code):

```
function findSeq(max, min){
var seqArr = [];
for(var i = max; i >= min; i--){
seqArr.push(i);
}
return seqArr;
}
```

If my algorithm is slow, how do I improve it?

3.If your algorithm is too slow, you need a new plan; but before doing that, you need to find out about why your algorithm is slow.