【问题标题】:Recursive Palindrom does not returning neither true nor false only undefined递归回文不返回既不真也不假,只返回未定义
【发布时间】:2020-09-22 18:45:17
【问题描述】:

然而,我尝试编写一个递归回文,尽管我在最后一次迭代中到达了真正的分支,但返回值仍然是未定义的。

因此,如果您在控制台中输入我的函数并使用回文。 rekurzivSzigoruPalindrom("雷达");

它将完美地遍历它,但返回值将是未定义的。 您能否指出我下面代码中的错误? 谢谢

function rekurzivSzigoruPalindrom(str, strLength = str.length) {
// debug eleje
console.log(strLength);
if (strLength > 1) {
console.log(str[str.length - strLength] + "  " +str[strLength-1] );
}
if(strLength == 1){
console.log(str[str.length-1]+ "   " +str[strLength-1]);
}
//debug vége
  if(typeof str == "string" || typeof str == "number"){
    if(typeof str == "number"){
       str = str.toString();
    }
  
    
    if(strLength > 1){
      if(str[str.length - strLength] == str[strLength-1]){
        //console.log(strLength);
        strLength--;
        
        rekurzivSzigoruPalindrom(str,strLength);
        }

    }
    else if(strLength == 1){
      if(str[str.length-1] == str[strLength-1]){
       console.log(strLength+"true");
        return true;
      }
      else{
        console.log(strLength+"false");
        return false;
        }    
        

      }

    }

    else {
      return false;

    }   
     
  }

【问题讨论】:

  • 尝试返回递归调用return rekurzivSzigoruPalindrom(str,strLength);,以便递归执行正确完成。
  • function rekurzivSzigoruPalindrom(str, strLength = str.length): str.length 不适用于数字 - 您尚未将它们转换为字符串。
  • strLength--; return rekurzivSzigoruPalindrom(str,strLength);: 你可能正在剪辑结尾,但不是开头。
  • 看我的代码,比较逻辑,看看有什么不同。

标签: javascript palindrome


【解决方案1】:

您必须返回递归调用的结果。

function rekurzivSzigoruPalindrom(str, strLength = str.length) {
// debug eleje
console.log(strLength);
if (strLength > 1) {
console.log(str[str.length - strLength] + "  " +str[strLength-1] );
}
if(strLength == 1){
console.log(str[str.length-1]+ "   " +str[strLength-1]);
}
//debug vége
  if(typeof str == "string" || typeof str == "number"){
    if(typeof str == "number"){
       str = str.toString();
    }
  
    
    if(strLength > 1){
      if(str[str.length - strLength] == str[strLength-1]){
        //console.log(strLength);
        strLength--;
        
        return rekurzivSzigoruPalindrom(str,strLength);
        }

    }
    else if(strLength == 1){
      if(str[str.length-1] == str[strLength-1]){
       console.log(strLength+"true");
        return true;
      }
      else{
        console.log(strLength+"false");
        return false;
        }    
        

      }

    }

    else {
      return false;

    }   
     
  }

【讨论】:

  • 您使用了 sn-p - 您可以添加一些测试字符串/数字来表明您的代码正在运行吗?
  • 退货声明
  • 哦!在if(strLength > 1)!抱歉 - 错过了(我看了!是时候换一副新眼镜了……)。
  • 别担心!我没有运行代码来检查它是否有效,OP 正在尝试解决这个问题,但我想指出他们的递归中缺少 return 语句的地方会回答他们的问题
  • 有时很难遵循别人的代码/逻辑(我指的是问题)。所以,我只是为这个意图写了一个解决方案(加上一些关于可能问题的挖掘和评论)。您对我的解决方案有何看法?
【解决方案2】:

递归:

function recPal(str) {
  str=""+str; // for numbers
  if(str.length<2) return true;
  if(str[0]!=str[str.length-1]) return false;
  return recPal(str.slice(1,-1));
};

var strs=[101, 75, "", "x", "xy", "99", "abba", "log", "racecar", "razor", "radar"];

strs.forEach(
  word=>
    console.log(
      "'"+word+"'"+
      (recPal(word)?" IS ":" is NOT ")+
      "a palindrome"
    )
);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 哇,干净又简单。谢谢 :) 我从中学到了很多。
  • 很高兴为您提供帮助 + 不客气!当你有 15 个声望点时,你可以选择我的答案 + 投票吗?
  • 我投了赞成票,但是我接受了 Ethan Lipkind 的回答,因为他更正了我的原始代码,而堆栈溢出不允许我同时接受这两个答案:(
猜你喜欢
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 2020-03-16
  • 2015-10-05
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多