как рекурсии этой строковой переменной - PullRequest
0 голосов
/ 13 ноября 2018

Я прочитал пример факториала в коде рекурсии, но мне интересно знать и о другом примере, я очень рад услышать, как объясняется этот случай, чтобы узнать немного рекурсии,

function rec(deleteNum) {
    var tempNum = ""
    var tempStr = ""
    for (var i = 0; i < deleteNum.length; i++) {
        if (deleteNum[i] === "0" || deleteNum[i] === "1" || deleteNum[i] === "2" || deleteNum[i] === "3" || deleteNum[i] === "4" || deleteNum[i] === "5" || deleteNum[i] === "6" || deleteNum[i] === "7" || deleteNum[i] === "8" || deleteNum[i] === "9") {
            tempNum += deleteNum[i]
        } else {
            tempStr += deleteNum[i]
        }
    }
    return tempStr
}

console.log(rec("test3yyy33333"))
console.log(rec("e79898080xampl222e"))

как проверить строку в рекурсии, чтобы получить результат, подобный приведенному выше, без использования for loop

я хочу, чтобы выходные данные были такими же, как указано выше

Ответы [ 5 ]

0 голосов
/ 13 ноября 2018

Вы можете использовать следующую рекурсивную функцию для достижения своей цели:

    function rec(deleteNum){
        if(deleteNum){
            if(deleteNum.length === 1){
                if(isNaN(deleteNum)){
                    return deleteNum;
                }else{
                    return '';
                }           
            }
            var firstChar = deleteNum[0];
            var withoutFirstChar = deleteNum.substr(1);
            if(isNaN(firstChar)){
                return firstChar + rec(withoutFirstChar);
            }else{
                return rec(withoutFirstChar);
            }
        }else{
            return '';
        }
    }
    console.log(rec(''));
    console.log(rec("test3yyy33333"));
    console.log(rec("e79898080xampl222e"));
0 голосов
/ 13 ноября 2018

Вы можете принять условие выхода, например, если вы получите пустую строку, верните пустую строку.

Затем вам нужно проверить, является ли первый символ цифрой, а затем вернуть рекурсию со слайсом.от второго символа.

Без проверки верните первый символ и вызов возврата для оставшейся части строки.

function rec(string) {
    if (string === '') return '';
    if (string[0] >= '0' && string[0] <= '9') return rec(string.slice(1));
    return string[0] + rec(string.slice(1));
}

console.log(rec("test3yyy33333"))
console.log(rec("e79898080xampl222e"))

Компактная версия получения первой и последней цифры строки и возврата либо этого значения, если оно нечетное, либо ноль.Затем проверьте внутренние цифры и продолжайте до тех пор, пока не останется ни одна, ни одна, или две цифры.

Для строк длиной более двух цифр снова вызовите функцию с разделенными частями.

function oddPairFirstLast(value) {
    value = value.toString();
    if (value.length === 0) return 0;
    if (value.length === 1) return +(value + 1);
    if (value.length === 2) return value % 2 && +value;
   return oddPairFirstLast(value.slice(0, 1) + value.slice(-1)) + oddPairFirstLast(value.slice(1, -1));
}

console.log(oddPairFirstLast(2345));  // 25 
console.log(oddPairFirstLast(2335));  // 58 
console.log(oddPairFirstLast(23351)); // 87 
console.log(oddPairFirstLast(42548)); // 51 
0 голосов
/ 13 ноября 2018

rec - это функция, которая принимает строку в качестве параметра deleteNum.

Затем функция выполняет итерацию по всей длине и, если символ в любой позиции является цифрой, она пропускает ее, в противном случае добавляет ее в строку. В конце он возвращает эту строку. Значит, он возвращает ту же строку без цифр.

Вы можете достичь этого, как показано ниже:

s = 'test3yyy33333';
t = 'e79898080xampl222e';

s = s.replace(/[0-9]/g, '') or s = [...s].filter(e => isNaN(e)).join('');
t = t.replace(/[0-9]/g, '') or t = [...t].filter(e => isNaN(e)).join('');
0 голосов
/ 13 ноября 2018

В случае отсутствия рекурсии, вы можете отфильтровать каждый символ и проверить, не является ли символ числом

function rec(str) {
   return [...str].filter(d => !Number.isInteger(+d)).join('')
}

console.log(rec("test3yyy33333"))
console.log(rec("e79898080xampl222e"))
0 голосов
/ 13 ноября 2018

Вы можете сделать рекурсию следующим образом

var reg = new RegExp('[0-9]'); // check for number

function rec(deleteNum) {
    tempNum = ""
    if (deleteNum === "") { 
        return ""; // if string is empty, return
    } else if (reg.test(deleteNum[0])) { // true if deleteNum[0] is a number
        return tempNum += rec(deleteNum.substr(1)) // if current first character is number, skip
    } else {
        return tempNum += deleteNum[0] + rec(deleteNum.substr(1)) // if current first character is not number, add to result and check the rest of the string
    }
}

Она проверяет символ за символом, используя подстроку спереди назад, пропуская, если текущий символ - число.Если это не число, он добавит символ к результату и проверит его подстроку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...