Нужно посчитать сумму цифр в числе использую рекурсию ( 123 = 1 + 2 + 3 = 6). Я решил задачу так , но в браузере не появляется модальное окно , долго искал где ошибка , нашёл в интернете похожее решение, но всё равно не могу понять где ошибка и что вообще я сделал не так
function sumNumber(n){
n = `${n}`;
let arr = n.split('');
if ( arr.lenght == 1) {
return arr[0];
}
else {
return arr[0] + sumNumber(arr.slice(1));
}
}
alert(sumNumber(123));
Что я сделал не так...
function sumNumber(n){ // Название функции не совсем отражает суть
n = `${n}`;
let arr = n.split(''); // Массив уже изначально содержит строки, не числа
if ( arr.length == 1) {
return arr[0];
}
else {
// arr[0] — строка. Нужно превращать его в число, т.к. в таком виде
// будет получаться "1" + 2 = "12" — и оно никогда не будет заканчиваться.
return arr[0] + sumNumber(arr.slice(1));
// arr.slice(1) — массив строк. Функция должна получать число, а не массив.
// Массив превращается в строку, получается писец.
}
}
alert( sumNumber(123) );
Правильный вариант:
function sumDigits(n) {
n = `${n}`;
if( n.length == 1 ) return +n; // Плюсик перед строкой - превращает её в число.
return +n[0] + sumDigits( n.slice(1) );
// n - всё еще строка (содержащая число).
// +n[0] — к первой цифре добавляем результат вызова той же функции
// для оставшихся цифр ( slice(1) берет всю строку, кроме первого символа )
}
console.log( sumDigits(1234) )
P.s. Такие задачи стоит решать через рекурсию только в учебных целях.
В реальной жизни будет уместно использовать обычный цикл. Например:
function sumDigits(n) {
let sum = 0;
for( let digit of `${n}` ){ // прямо тут, сразу превращая n в строку
sum += +digit;
}
return sum;
}
console.log( sumDigits(1234) );
А, например, используя регулярные выражения, можно посчитать сумму всех цифр в любой строке. \d
от слова digit, означает совпадение с любой цифрой. .match()
возвращает массив совпадений.
function sumDigits(n) {
return `${n}`.match(/\d/g).reduce( (sum, digit) => sum + +digit, 0 );
}
console.log( sumDigits( -1234.5 ) );
function sum(x, n){
if( n == 1 ){
return x
} else{
return x * sum( x, n - 1 );
}
}
console.log( sum(2, 3) )
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хочу отменить стандартное действие при нажатии на кнопку "Назад", есть функция, которая отслеживает нажатие на кнопку "Назад"
https://learnjavascript
как объединить их в thisbufArr, чтобы ключами были буквы из leftArray а значение брались по букве из letterArray Пытался пушом но не получалось