递归回文既不返回真也不返回假,只返回未定义

Recursive Palindrom does not returning neither true nor false only undefined

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

因此,如果您在控制台中输入带有回文的 my function。 rekurzivSzigoruPalindrom("雷达");

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

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;

    }   
     
  }

递归:

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; }

你必须return你的递归调用的结果。

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;

    }   
     
  }