资讯专栏INFORMATION COLUMN

函数表达式--递归

姘搁『 / 1717人阅读

摘要:不过,可以使用命名函数表达式来达成相同的结果这种方式在严格模式和非严格模式下都行得通

递归

递归函数是在一个函数通过名字调用自身的情况下构成的

function f(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * f(num - 1)
    }
}
f(3) // 6

var anotherFactorial = f;
f = null; //f指向一个空指针
alert(anotherFactorial(4)); //出错!

arguments.callee 是一个指向正在执行的函数的指针,因此可以用它来实现对函数的递归调用

function f(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * arguments.callee(num-1)
    }
}
f(3) // 6

var anotherFactorial = f;
f = null; //f指向一个空指针
alert(anotherFactorial(4)); //24

但在严格模式下,不能通过脚本访问 arguments.callee ,访问这个属性会导致错误。不过,可以使用命名函数表达式来达成相同的结果

var factorial = (function f (num) {
if (num <= 1){
return 1;
} else {
return num * f(num-1);
}
});
factorial(4) //24

这种方式在严格模式和非严格模式下都行得通

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101487.html

相关文章

  • SICP Python 描述 3.2 函数和所生成的过程

    摘要:函数和所生成的过程来源译者飞龙协议函数是计算过程的局部演化模式。在这一章中,我们会检测一些用于简单函数所生成过程的通用模型。也就是说,递归函数的执行过程可能需要再次调用这个函数。 3.2 函数和所生成的过程 来源:3.2 Functions and the Processes They Generate 译者:飞龙 协议:CC BY-NC-SA 4.0 函数是计算过程的局部演化...

    lolomaco 评论0 收藏0
  • ES6函数与Lambda演算

    摘要:高阶函数函数式编程中,接受函数作为参数,或者返回一个函数作为结果的函数通常就被称为高阶函数。均属于高阶函数,高阶函数并不神秘,我们日常编程也会用到。参考演算函数式编程指南入门康托尔哥德尔图灵永恒的金色对角线原文函数与演算 缘起 造了一个轮子,根据GitHub项目地址,生成项目目录树,直观的展现项目结构,以便于介绍项目。欢迎Star。 repository-tree 技术栈: ES6 ...

    fasss 评论0 收藏0
  • Javascript 中 Y 组合子的推导

    摘要:组合子是演算中的一个概念,是任意函数的不动点,在函数式编程中主要作用是提供一种匿名函数的递归方式。组合子如下本文将尽量通俗易懂的以实现匿名函数递归为导向,推导出这一式子。若将替换为,将导致组合子中的作为的参数被立即求值。 Y 组合子是 lambda 演算中的一个概念,是任意函数的不动点,在函数式编程中主要作用是 提供一种匿名函数的递归方式。 Y 组合子如下: $$ λf.(λx.f(x...

    sourcenode 评论0 收藏0
  • Python数据结构——解析树及树的遍历

    摘要:左子树的加法运算结果为,右子树的减法运算结果为。如图,该图说明了随着每个新的字符被读入后该解析树的内容和结构。使函数走向基点的递归过程就是调用求值函数计算当前节点的左子树右子树的值。最后,我们将在图中创建的解析树上遍历求值。 解析树 完成树的实现之后,现在我们来看一个例子,告诉你怎么样利用树去解决一些实际问题。在这个章节,我们来研究解析树。解析树常常用于真实世界的结构表示,例如句子或数...

    miguel.jiang 评论0 收藏0
  • 基于CPS变换的尾递归转换算法

    摘要:一个解决的办法是从算法上解决,把递归算法改良成只依赖于少数状态的迭代算法,然而此事知易行难,线性递归还容易,树状递归就难以转化了,而且并不是所有递归算法都有非递归实现。 前言 众所周知,递归函数容易爆栈,究其原因,便是函数调用前需要先将参数、运行状态压栈,而递归则会导致函数的多次无返回调用,参数、状态积压在栈上,最终耗尽栈空间。 一个解决的办法是从算法上解决,把递归算法改良成只依赖于少...

    supernavy 评论0 收藏0
  • JS函数达式的特征和递归

    摘要:函数表达式是中的一个既强大又容易令人困惑的特性。函数表达式有几种不同的语法形式。匿名函数的属性是空字符窜。在把函数当成值使用的情况下,都可以使用匿名函数。不过,这并不是匿名函数唯一的用途。不过我们可以使用命名函数表达式来达成相同的成果。 前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下。如有纰漏或错误,会...

    mudiyouyou 评论0 收藏0

发表评论

0条评论

姘搁『

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<