理解递归甚至函数问题(Javascript)

Mac*_*tko 5 javascript recursion

问题很简单,我有一个来自'Javascript Allonge'书的功能,并且很难理解它.

该函数被称为偶数,它如下:

var even = function(num) {
    return (num === 0) || !(even(num -1));
}
Run Code Online (Sandbox Code Playgroud)

它检查数字是否均匀,但我不明白如何.它以递归方式调用自身,技术上总是达到零,不是吗?这是如何运作的?

Mah*_*out 7

这是基于数字奇数或偶数的归纳定义 - 数字,n当它前面的数字是'偶数'时n - 1是奇数.这种想法自然是有道理的 - 即使3是奇数,4也是如此.

所以函数even定义为:

1. even(0)是真的 - 因为0是偶数

2. even(n)是否定even(n - 1)

想到它的另一种方式是想象even(4)被逐步调用.手动,用您的功能将评估结果替换为偶数(4):

even(4)
= !(even(3))
= !(!even(2))
= !(!(!even(1))
= !(!(!(!even(0)))
= !(!(!(!true))
= true


// ...even(4) == true
Run Code Online (Sandbox Code Playgroud)