/** 
	7! = 7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040
	------------------
	7! = 7 x 6! = 5040
	6! = 6 x 5! = 720
	5! = 5 x 4! = 120
	4! = 4 x 3! = 24
	3! = 3 x 2! = 6
	2! = 2 x 1! = 2
	1! = 1 x 1 = 1
	0! = 1
**/

// Iteration
function factorialIter(num){
	var result = 1;
	for (var i = 1; i <= num; i++) {
		result = result * i;
	}
	return result;
}

// Accumulator - computes during stack push
function factorialAccumRecur(num, total = 1) {
	if (num === 0) {
		return total;
	}
	return factorialAccumRecur(num - 1, total * num);
}

// Tail Recursion - computes during stack pop
function factorialTailRecur(num) {
	if(num === 0) {
		return 1
	} else {
		return num * factorialTailRecur(num - 1);
	}

}

console.log('factorialIter:', factorialIter(100));

console.log('factorialAccumRecur:', factorialAccumRecur(100));

console.log('factorialTailRecur:', factorialTailRecur(100));