[英]Why does this recursive javascript function return what it does?
var fn = function even (n) {
if (n === 0) {
return true
}
else return !even(n - 1)
}
fn(5)//=> false
fn(2) //=> true
为什么此功能按其方式工作? 当我在参数为5时逐步执行它时,它似乎会自行调用,直到n为零为止,这将返回true,但返回false。
每个递归步骤都会对先前的结果添加一个否定值:
f(0) = true
f(1) = !f(0) = !true = false
f(2) = !f(1) = !!f(0) = !!true = !false = true
依此类推,对于f(5),您得到
f(5)
!f(4)
!!f(3)
!!!f(2)
!!!!f(1)
!!!!!f(0)
!!!!(!true)
!!!(!false)
!!(!true)
!(!false)
!true
false
这是因为!
当该函数为0时,它返回true。
如果为1,它将返回!even(0)-> false。
如果为2,它将返回!even(1)=>!(!even(0))=>!(false)=> true。
由于布尔值为true或false,表示两个可能的值,而您一次又一次地切换它们就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.