2 javascript recursion lambda functional-programming function
const res = (n => {
const even = x => {
if (x === 0)
return true
else {
const odd = y => !even(y)
return odd(x - 1)
}
}
return even(n)
})(42)
console.log(res) //=> true
Run Code Online (Sandbox Code Playgroud)
因为在参数中使用了42,但是只有当x为0并严格等于其类型和值时才会返回true,我不确定为什么返回true.我认为任何值,但0应该返回false.有人可以向我解释一下,我对javascript和编程很新.
如果你用局部函数和IIFE去除所有不必要的部分,那么你只得到一个零的测试,那么它是一个偶数值或递归调用,甚至没有减少一个值.
const even = x => x === 0 || !even(x - 1);
console.log(even(42)) // true
console.log(even(43)) // falseRun Code Online (Sandbox Code Playgroud)
发生的是一个递归调用
evenRun Code Online (Sandbox Code Playgroud)n result of calling simplified -- ----------------- ---------- 8 !even(7) !even(7) 7 !!even(6) even(6) 6 !!!even(5) !even(5) 5 !!!!even(4) even(4) 4 !!!!!even(3) !even(3) 3 !!!!!!even(2) even(2) 2 !!!!!!!even(1) !even(1) 1 !!!!!!!!even(0) even(0) 0 !!!!!!!!true true