试图理解递归,为什么lengthPal将testPalindrone.length存储为数字?

使用console.log时,将推出5、3、1。
这是否意味着lengthPal是一个数组?

const checkPalindrone = (testPalindrone) => {
  let lengthPal = testPalindrone.length;
  testPalindrone = testPalindrone.toLowerCase();
  console.log(testPalindrone.length);
  console.log(typeof lengthPal);
  if (lengthPal === 0 || lengthPal === 1) {
    return true;
  }
  if (testPalindrone[0] === testPalindrone[lengthPal - 1]) {
    return checkPalindrone(testPalindrone.slice(1, lengthPal - 1));
  }
  return false;
}

console.log(checkPalindrone("Radar"));

最佳答案

在上面的代码示例中,lengthPal变量的类型为number(Javascript)。

为了帮助您理解上述功能,让我们逐行分解代码

let lengthPal = testPalindrone.length;
testPalindrone = testPalindrone.toLowerCase();



lengthPal将获取字符串的长度,而testPalindrome会将输入字符串转换为所有小写字母。


if (lengthPal === 0 || lengthPal === 1) {
  return true;
}



这是递归函数的基本条件,一旦发现输入字符串的长度为1或0,计算就应该结束。


if (testPalindrone[0] === testPalindrone[lengthPal - 1]) {
  return checkPalindrone(testPalindrone.slice(1, lengthPal - 1));
}



以上是您检查第一个字符(testPalindrone[0])和最后一个字符(testPalindrone[lengthPal - 1])是否相同的重要步骤。如果此条件匹配,则您基本上想通过执行此testPalindrone.slice(1, lengthPal - 1)删除第一个字符和最后一个字符并使用精简字符串再次调用递归函数来精简字符串。


return false;



最后,如果上述if条件不匹配,则返回false,在这种情况下,该字符串不是回文。


我希望这有助于理解。

10-06 15:04