【问题标题】:how to i write my function in recursive way?如何以递归方式编写我的函数?
【发布时间】:2026-01-26 00:50:02
【问题描述】:

如何以递归方式编写函数?我在我的 learnJS 书中找到了这个任务,即使我为什么要这样做,仍然无法弄清楚。

btw 函数检查 polindrome

function clean(str) {
    return str.toLowerCase().replace('ё', 'е').replace('ъ', 'ь').replace(/[^\w\s]|_/g, "").trim().replace(/\s+/g, " ");
}

function checkPalindrome(str) {
    let cleanStr = clean(str);
    for (let i = 0; i < cleanStr.length / 2; i++) {
        if (cleanStr[i] !== cleanStr[cleanStr.length - 1 - i]) {
            return false;
        }
    }
    return true;
}

【问题讨论】:

  • 这能回答你的问题吗? Palindrome check in Javascript
  • 你能证明自己任何努力解决这个问题吗?
  • 递归函数是以某种方式调用自身的函数。递归函数有很多例子。 javascripttutorial.net/javascript-recursive-function
  • @GetSet 不,您不需要处理彼此不同的偶数/奇数长度的字符串。您只需要相应地调整基本情况。
  • @GetSet 诀窍是不要从中间开始……

标签: javascript function recursion


【解决方案1】:

我不会为你编写代码,但我会给你一些伪代码逻辑,你可以用它们来理解递归。

function(input)
    Check if input string length is less than or equal to 1 (explained below)
        if it is then return true

    Check if first and last characters are the same
        if they are, strip the first and last characters off, pass this new string
        to your function again, and return the result

        if they are not, return false

让我们通过一个例子来运行。

示例 1(偶数长度)

输入字符串为anna。您的代码检查字符串长度,它不是 第一个字符和最后一个字符相同。我们把它们去掉,然后将nn 传递给函数 AGAIN(这是递归)。请注意,第一个电话尚未返回。
该函数检查输入字符串nn 的长度,它仍然>1,所以继续。它检查第一个和最后一个字符是否匹配,去掉它们,然后使用空字符串 再次调用该函数。
现在我们进入函数的第三次调用。越来越像《盗梦空间》了。在第三次调用中,这个空白字符串 第二个函数调用返回第三个 (true) 的值。
第一个函数调用返回第二个 (true) 的值,我们就完成了!

示例 2(奇数长度)

现在快点,让我们看一个 5 个字母的回文civic
第一次调用比较开始/结束c,然后继续。
第二次调用比较开始/结束i,然后继续。
third 调用检查v 是否为回文。长度小于或等于一,返回true!

示例 3(无效)

还有一个无效的回文dead
第一次调用比较开始/结束d 并继续。
第二次调用比较开始/结束ea并返回false。 第一个调用返回第二个 (false) 的值,这是一个无效的回文。

一些最后的想法

您需要考虑是否/如何处理空格(例如可能删除所有空格,Noel sees Leon)和大写字母(可能将整个句子转换为小写)。更复杂的是标点符号/非英文字符,但鉴于这是一个教程练习,它可能超出了问题的范围。

【讨论】: