使用 JavaScript 进行递归回文检查

Nia*_*san 5 javascript recursion palindrome

我试图通过使用 javascript 的递归来找出字符串是否是回文。但我无法弄清楚代码中缺少什么。

var firstCharacter = function(str) {
    return str.slice(0, 1);
};

var lastCharacter = function(str) {
    return str.slice(-1);
};

var middleCharacters = function(str) {
    return str.slice(1, -1);
};

var isPalindrome = function(str) {
    if(str.length < 2) {
        return true;
    } else {
        if(firstCharacter(str) == lastCharacter(str)) {
            isPalindrome(middleCharacters(str));
        } else return false;
    }
};

var checkPalindrome = function(str) {
    console.log("Is this word a palindrome? " + str);
    console.log(isPalindrome(str));
};


checkPalindrome("a");
//Program.assertEqual(isPalindrome("a"), true);
checkPalindrome("matom");
//Program.assertEqual(isPalindrome("motor"), false);
checkPalindrome("rotor");
//Program.assertEqual(isPalindrome("rotor"), true);
Run Code Online (Sandbox Code Playgroud)

递归调用肯定有问题。我很想得到你的帮助。谢谢。我附上了我的代码的输出。

在此处输入图片说明

小智 11

这是另一个递归回文。

function checkPalindrome(str){
    if(str.length === 1) return true;
    if(str.length === 2) return str[0] === str[1];
    if(str[0] === str.slice(-1)) return checkPalindrome(str.slice(1,-1))
    return false;
}

console.log(checkPalindrome('a')) // true
console.log(checkPalindrome('matom')) // false
console.log(checkPalindrome('rotor')) // true
Run Code Online (Sandbox Code Playgroud)


cdl*_*ane 5

您定义isPalindrome()为返回一个值,因此如果您自己调用它,递归或其他方式,您需要处理该返回值。另外,你的if ... else逻辑太复杂了,简化一下:

var isPalindrome = function(str) {
    if (str.length < 2) {
        return true;
    }

    if (firstCharacter(str) == lastCharacter(str)) {
        return isPalindrome(middleCharacters(str));
    }

    return false;
};
Run Code Online (Sandbox Code Playgroud)


Nit*_*agi 5

    const isPalindrome = str => {
    const strLen = str.length;
    if (strLen < 2) return true;

    if (str[0] === str[strLen - 1]) {
        return isPalindrome( str.slice(1, strLen - 1) );
    }

    return false;
};

console.log(isPalindrome('madam'));
Run Code Online (Sandbox Code Playgroud)