用于实现匿名递归的Javascript实例代码
实名递归
让我们从真正的名字开始,或者使用阶乘的最简单的例子。
函数事实(n){
如果(n<2){
返回N;
{人}
返回n *事实(n - 1);
}
}
console.log(事实(5));
递归要求您调用自己,如果函数有名称,它太简单了。
利用变量实现递归
函数也可以分配给变量,但是为了实现递归,函数体仍然依赖于变量名。
函数(n){
如果(n<2){
返回N;
{人}
返回n×f(n - 1);
}
}
console.log(F(5));
应该说,这种方式与事实上没有本质的区别。
匿名递归
现在我们来讨论匿名递归的实现。
设想
如果要返回匿名递归函数,或者定义匿名递归函数,并直接调用它:
(函数(n){)
如果(n<2){
返回N;
{人}
返回n *(n - 1);
}
})(5);
如果我们没有名字,代码中的问号不知道要填写什么,也没有递归。这个时候我们该做什么此时,请求参数对象。
参数对象
在Javascript函数中,参数对象代表实际调用的参数对象。在递归函数中,实际上我们不能定义形参n:
功能factnoparam(){
如果(参数{ 0 } < 2){
返回参数{ 0 };
{人}
返回参数{ 0 } * factnoparam(参数{ 0 } - 1);
}
}
console.log(factnoparam(5));
只要我们在调用时传递实际参数,就可以使用参数{ 0 }来获得实际传入参数的值。
如果有更多参数,则可以通过参数{ 1 }、参数{ 2 }等获得。
arguments.callee属性
参数可用于获取参数,我相信你可能已经知道,但争论的对象的属性,所谓的callee.arguments.callee代表本身的功能。这意味着什么事实上,我们可以完全写出这样的事实。
函数事实(n){
如果(n<2){
返回N;
{人}
返回N×arguments.callee(n - 1);
}
}
console.log(事实(5));
所以它仍然是递归的。因为arguments.callee实际上等于事实。
然后,在这里,有此属性的帮助,这是不难实现的匿名递归,只要是改变arguments.callee:
(函数(n){)
如果(n<2){
返回N;
{人}
返回N×arguments.callee(n - 1);
}
})(5);
如果您需要它,也可以将它作为匿名递归返回。
这里介绍了javascript的匿名递归,希望对您的学习有所帮助,希望大家多多支持。