为什么这个递归的javascript函数返回它的作用
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) => !(!偶数(0)) => !(假)=>真。
由于布尔值要么为真,要么为假,这意味着两个可能的值,并且您一次又一次地切换它们,因此它有效。
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 通过浏览器加载页面时触发加载脚本(js或jQuery)'s”;返回“;作用
- 从帖子返回后,Javascript重定向不起作用
- 简单的jquery不起作用,并返回错误
- 在返回私有函数之前发生作用域泄漏
- jQuery返回多个函数;不起作用
- jqBootstrapValidation不起作用,始终返回有效值;
- jQuery.pr()返回undefined,而.attr()对数据-*的作用与预期一样
- 在调用中使用返回的json值不起作用
- '有角度的靠背'返回页首按钮不起作用
- Ruby作用域,从函数返回Proc
- 简单的onClick返回函数不起作用
- '返回链接'赢得'不起作用
- 为什么当我调用具有返回值的函数时,我的 onclick 事件不起作用
- AngularJS 从 addEventListener 返回作用域中的值
- AJAX/jquery 在返回的 PHP 站点上不起作用
- 通过返回 false - 不起作用(javascript)来阻止链接打开
- 为什么这个递归的javascript函数返回它的作用
- 返回了JS对象,但响应文本不起作用
- jQuery 拖放更改我的 URL - 返回 false 不起作用