 # Regarding iteration

As far as I know “product” is the beginning point of the iteration (loop), from all exersizes and examples for loops have always taught that the loop starts at “product”. Now I’m very confused because if one puts this code into an editor it actually factorizes the number 5, I don’t see why it should

I got this example as one of the solutions here:

Please explain to me how…the value used to initialize is now suddenly used to show where the loop ends? lol

``````  **Your code so far**
``````
``````
function factorialize(num) {
for (var product = 1; num > 0; num--) {
product *= num;
}
return product;
}

factorialize(5);
``````
``````  **Your browser information:**
``````

User Agent is: `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36`

Challenge: Factorialize a Number

The anatomy of a `for` loop is as follow:

``````for ([initialExpression]; [conditionExpression]; [incrementExpression])
statement
``````

1 - A for loop starts by invoking the initial expression.

2 -Before executing the statement, the loop checks the condition expression.
If true it executes the statement.
3 - After executing the statement, it will execute the increment expression.
Then back at checking the condition (2) and repeating those steps.

Let’s take the above function `factorialize(5)`

This is how it will unfold.

• initial expression: `product = 1`
• condition: `5 > 0 ? true` → execute the statement → `product = 5 * 1`
(so now product is 5)
• increment expression: `num--``num = 4`
• condition: `4 > 0 ? true` → statement → `product = 5*4`
(so now product is 20)
• increment: `num--``num = 3`

[…so on and so forth]
Until `num = 0`.

Hope this makes better sense…
Kida difficult to explain it “visually” function factorialize(num) {
for ( var product = 1; num > 0 ; num- -){
product *= num;
}
console.log(product);
}
factorialize(5)

``````    // first cycle
//  for (var product = 1; 5 > 0; num--) {
//    product *= num;   // for this cycle 5 is greater than
``````

0 so output is product value is 1 and our
num value is 5 so output = 5

``````// second cycle
// 4 > 0 so cycle will contitnue output for this
``````

cycle is 20 because of first cycle 5 * 4 and here
num = 4 because we are decreasing num–

``````// third cycle
// 3 > 0 output of third cycle will be 20 * 3 = 60
// fourth cycle
// 2 > 0 output 60 * 2 = 120
// fifth cycle
// 1 > 0 output of this cycle is 120 * 1 =  120
// sixth cycle
// 0 > 0  which is false so here loop will end
// that why output of our loop will be 120
``````

hope you will get it , thank you !

The point im trying make here is…this loop ends at product, not start.
For example 1(“product” at beginning) 2345 (end of loop)
Not:
5432(“product” at end)1 (end of loop)

Does this make sense to my question??

Not really sure I understand what you exactly means.

Remember that the 3 statements of a for loop don’t have to necessarily be about the same variable, they are all independent logic.

Like in this case the initial expressions refers to `product`
But the condition refers to `num`, the number passed to the function.

So `product` gets updated from the loop body, while num gets updated by the loop conditions… if it make sense.

It’s probably because you are used to more “linear” loop, where you initialise and update the same “condition” like:

``````for(let num = 0; num < 0; num++)
``````

Does it makes more sense?

Look, its not the different variables thats involved, the way i understand this solution is that it uses the initiation variable to actually end the loop, as far as i know this is wrong?

This is not true at all.

In this loop `product` is initialized, but the `product` has absolutely nothing to do with the termination condition, which is based on `num`.

Honestly, I’m not a very big fan of this solution, as its a mildly confusing way to accomplish this iteration.

it is the condition expression that ends the loop. as long as num is bigger than 0 the loop will keep running.

1 Like