0

当我继续寻求掌握递归时,我遇到了这个问题。字符串“s”显然在头部和尾部被削掉,直到它的长度<=“1”,但我看不出这个削掉发生在函数的哪个位置。

帮助?

function isPalindrome(s)
{
    if (s.length <= 1) return true;
    console.log(s);
    return s[0] == s[s.length -1]  &&  isPalindrome(s.substr(1,s.length -2));    
}

isPalindrome("abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba");
4

5 回答 5

2

s.substr是什么切。

它将字符串的子串从第二个字符传递到最后一个字符。

于 2013-08-20T18:08:22.547 回答
1
s.substr(1,s.length -2)

函数 substr 返回传入的两个值之间的字符串。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr

于 2013-08-20T18:08:34.803 回答
1

它发生在这个语句中:

isPalindrome(s.substr(1,s.length -2)

您正在递归字符串的子字符串,其中它会切断最后一个字符。

于 2013-08-20T18:09:19.927 回答
1
function isPalindrome(s)
{
    // if this is a 0 or 1 character string it is a palindrome 
    if (s.length <= 1) return true;
    console.log(s);

    // if the first character is last character and the substring
    // from second character to second last character is also palindrome,
    // return true, else return false.
    return s[0] == s[s.length -1]  &&  isPalindrome(s.substr(1,s.length -2));    
}

isPalindrome("abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba");

碎片部分当然是s.substr(1,s.length -2)=子串。

于 2013-08-20T18:09:39.350 回答
0

为什么检测回文的功能如此困难?

function isPalindrome(s)
{
    return s.split("").reverse().join("") == s;   
}

这会容易得多。

于 2013-08-20T18:16:42.903 回答