Я начал с HackerRank, и я чертовски новичок.
Итак, у меня вопрос к этому коду:
'use strict';
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', inputStdin => {
inputString += inputStdin;
});
process.stdin.on('end', _ => {
inputString = inputString.trim().split('\n').map(string => {
return string.trim();
});
main();
});
function readLine() {
return inputString[currentLine++];
}
/*
* Create the function factorial here
*/
function factorial(n) {
if (n === 1) {
return 1
} else {
return n * factorial(n - 1)
}
return n;
}
function main() {
const n = +(readLine());
console.log(factorial(n));
}
Я разбил его на что-то вроде этого:
Будем зависеть n = 4;
4 === 1 ? // NO!
THEN:
4 * factorial(4-1) // n = 3;
3 === 1? // NO!
THEN:
3 * factorial(3-1) // n = 2;
2 === 1? // NO!
THEN:
2 * factorial(2-1) // n = 1;
1 === 1? // YES!
return 1;
Что происходит сейчас? Что происходит с возвратом 1 и что происходит со всеми другими «циклами» ?! И почему это l oop снова и снова, даже если нет l oop?
Пожалуйста, постарайтесь объяснить как можно проще.