在尝试解决 "Palindrome" 挑战的 if 条件下在递归函数上获取 False
Getting False on a recursive function with if conditions trying to solve the "Palindrome" Challenge
所以我在做这个流行的挑战“回文”,我从“前端大师”Javascript 系列中复制这个解决方案,我得到了不同的输出。我想知道是否有什么变化或者我错过了什么。这是我在 Whosebug 上的第一个问题,因为这只是 MindF***k。
这是怎么回事?
'use strict'
function isPalindrome(str) {
if (str.length <= 1) return true;
var first = str[0];
var last = str[str.length - 1];
if (first === last) {
console.log(str.substring(1, str.length - 1))
isPalindrome(str.substring(1, str.length - 1));
}
return false;
}
console.log(isPalindrome("abcdcba")) // Return false on my machine
我在 RunJS 应用程序和 VScode 终端上尝试了这个,我也在文件上 运行 节点。
继续返回错误!!
当且仅当输入的长度为<= 1
:
时,函数才会returntrue
if (str.length <= 1) return true;
不是:
isPalindrome("abcdcba")
函数中的only other return
语句是:
return false;
看起来你的意思是到return递归结果:
return isPalindrome(str.substring(1, str.length - 1));
否则该函数不会对递归调用自身的结果做任何事情,只是在最后一行默认为 returning false
。
我修复了你的代码...
'use strict'
function isPalindrome(str) {
if (str.length <= 1) return true;
var first = str[0];
var last = str[str.length - 1];
if (first === last) {
console.log(str.substring(1, str.length - 1))
return isPalindrome(str.substring(1, str.length - 1));
}else return false;
}
console.log(isPalindrome("abcdcba")) //
我看到递归函数有两个不同的部分:
- 当函数开始调用自身并堆叠函数调用时继续。
- 当所有堆栈函数开始 returning 值时,以相反的方式返回。在您的示例中,此阶段在
if (str.length <= 1) return true
或 if first !== last
. 之后开始
我认为你在前进时完全正确,但在回来时有一个小细节。你需要记住,你有你的解决方案,你需要通过所有调用返回初始值 return 值。
递归函数分为两部分:
function recursive{
//forward processing
..
resultValue = recursive()
..
// backward processing if needed
return kindOfResultValue //resultValue or a transformation if needed
}
注: Remember to check all conditional branches of your recursive function to return always a value after calling itself
所以我在做这个流行的挑战“回文”,我从“前端大师”Javascript 系列中复制这个解决方案,我得到了不同的输出。我想知道是否有什么变化或者我错过了什么。这是我在 Whosebug 上的第一个问题,因为这只是 MindF***k。
这是怎么回事?
'use strict'
function isPalindrome(str) {
if (str.length <= 1) return true;
var first = str[0];
var last = str[str.length - 1];
if (first === last) {
console.log(str.substring(1, str.length - 1))
isPalindrome(str.substring(1, str.length - 1));
}
return false;
}
console.log(isPalindrome("abcdcba")) // Return false on my machine
我在 RunJS 应用程序和 VScode 终端上尝试了这个,我也在文件上 运行 节点。
继续返回错误!!
当且仅当输入的长度为<= 1
:
true
if (str.length <= 1) return true;
不是:
isPalindrome("abcdcba")
函数中的only other return
语句是:
return false;
看起来你的意思是到return递归结果:
return isPalindrome(str.substring(1, str.length - 1));
否则该函数不会对递归调用自身的结果做任何事情,只是在最后一行默认为 returning false
。
我修复了你的代码...
'use strict'
function isPalindrome(str) {
if (str.length <= 1) return true;
var first = str[0];
var last = str[str.length - 1];
if (first === last) {
console.log(str.substring(1, str.length - 1))
return isPalindrome(str.substring(1, str.length - 1));
}else return false;
}
console.log(isPalindrome("abcdcba")) //
我看到递归函数有两个不同的部分:
- 当函数开始调用自身并堆叠函数调用时继续。
- 当所有堆栈函数开始 returning 值时,以相反的方式返回。在您的示例中,此阶段在
if (str.length <= 1) return true
或if first !== last
. 之后开始
我认为你在前进时完全正确,但在回来时有一个小细节。你需要记住,你有你的解决方案,你需要通过所有调用返回初始值 return 值。
递归函数分为两部分:
function recursive{
//forward processing
..
resultValue = recursive()
..
// backward processing if needed
return kindOfResultValue //resultValue or a transformation if needed
}
注: Remember to check all conditional branches of your recursive function to return always a value after calling itself