用于实现匿名递归的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的匿名递归,希望对您的学习有所帮助,希望大家多多支持。