前言

所谓的递归函数就是在函数体内调用本函数。使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用 ,比如阶乘问题。

递归计算阶乘的例子

<!DOCTYPE html>
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>js中递归函数的使用</title> <script type="text/javascript"> function f(num){ if(num<1){ return 1; }else{ return f(num-1)*num; } } </script> </head> <body> <script type="text/javascript"> alert("10!的结果为:"+f(10)); </script> </body>
</html> 

js递归函数调用自身时的保险方式

一般思路

function fact(num){ if (num<=1){ return 1; }else{ return num*fact(num-1); }
}
var anotherFact = fact;
fact = null;
alert(antherFact(4)); //由于fact已经不是函数了,所以出错。 

使用arguments.callee

arguments.callee 指向正在执行的函数的指针。

警告:在严格模式下,第5版 ECMAScript (ES5) 禁止使用 arguments.callee()。当一个函数必须调用自身的时候, 避免使用 arguments.callee(), 通过要么给函数表达式一个名字,要么使用一个函数声明.参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments/callee

function fact(num){ if (num<=1){ return 1; }else{ return num*arguments.callee(num-1); //此处更改了。 }
}
var anotherFact = fact;
fact = null;
alert(antherFact(4)); //结果为24. 

阿里巴巴2015年前端面试题

请实现一个fibonacci函数,要求其参数和返回值如下所示:
/***@desc: fibonacci*@param: count {Number}*@return: result {Number} 第count个fibonacci值,计数从0开始fibonacci数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 …]则getNthFibonacci(0)返回值为1则getNthFibonacci(4)返回值为5*/
function getNthFibonacci(count) {
}

标准答案:

function fib(count) {//参数判断var count = parseInt(count);if (isNaN(count) || count < 0) {return 0;}function f(count) {if (count <= 1)return 1;return arguments.callee(count - 1) + arguments.callee(count - 2);    //callee是装逼用的,直接用f也行}return f(count);
}

JS实现函数递归、运用技巧相关推荐

  1. JS 函数 函数递归

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 重要:函数也是对象,你可以给它们添加属性或者更改它们的属性. 函数内部对象:arguments 解析:函数实际 ...

  2. 41 JS函数递归调用

    文章目录 1.概念 2.应用 3.案例:求斐波那契数列第N项的值 1.概念 递归调用是函数嵌套调用中一种特殊的调用.它指的是一个函数在其函数体内调用自身的过程,这种函数称为递归函数. 2.应用 下面以 ...

  3. java 7.函数-递归_带有谓词的Java中的函数样式-第2部分

    java 7.函数-递归 在本文的第一部分中,我们介绍了谓词,这些谓词通过具有返回true或false的单一方法的简单接口,为Java等面向对象的语言带来了函数式编程的某些好处. 在第二部分和最后一部 ...

  4. Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数【含代码】)- 案例篇

    文章目录 Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数[含代码])- 案例篇 效果截图: 重要代码: 附:全部HTML代码: Ajax异步请求(重渲染DOM元素时,如何自动调 ...

  5. 【C语言】函数递归(详解)

    文章目录 函数递归 什么是递归? 递归的俩个必要条件 代码引例1 栈溢出(Stack Overflow) 合理使用递归 代码引例3 代码引例4 解释要合理使用递归 结束语 函数递归 程序调用自身的编程 ...

  6. C语言函数递归—经典递归问题

    目录 一.什么是递归? 二. 汉诺塔问题 2.1 认识什么是汉诺塔 2.2 汉诺塔打印步数 2.3 汉诺塔打印步骤 三.青蛙跳台阶问题 一.什么是递归? 这里我们先简单的认识一下什么是函数递归:我们可 ...

  7. 【C语言】函数 ---- 函数的嵌套调用和链式访问、函数的声明和定义、变量的声明和定义、函数递归与迭代、递归时的栈溢出问题

    函数 一.函数的嵌套调用和链式访问 1.嵌套调用 2.链式访问 2.1strlen()函数 2.2printf()函数 二.函数的声明和定义 1.函数声明和定义的介绍 2.函数声明和定义的使用 三.变 ...

  8. 对于C语言函数递归的简单理解(新手入门必看!!!)

    什么是函数递归? 程序调用自身的编程技巧称为递归(recursion). 递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型 ...

  9. python函数递归年龄,python之函数递归

    函数递归调用 在函数内部,可以调用其它函数,如果一个函数在内部调用自身,即是递归调用 为防止无限递归类似于死循环,需要如下: 1.必须要有一个明确的返回值: 2.每次进入更深一层递归时,问题规模应该比 ...

最新文章

  1. F# 4.5提供Spans、Match!等特性
  2. ubuntu install fonts
  3. Git show-branch显示提交信息
  4. dynamodb java_使用Java将项目插入DynamoDB表
  5. java 基本类型 引用类型_Java中的基本类型和引用类型变量的区别
  6. 论文浅尝 | 通过文本到文本神经问题生成的机器理解
  7. 5.abp框架code first方式删除表
  8. 【黑客免杀攻防】读书笔记15 - 源码免杀、C++壳的编写
  9. java汉字转拼音区别多音字_Java中汉字转拼音pinyin4j用法实例分析
  10. matlab不定积分曲线族画图,matlab不定积分
  11. ssh连接阿里云服务器报错 Server responded ”Algori thm negotiation failed.”
  12. 曙光服务器如何重新设置u盘启动_u盘装曙光服务器 曙光服务器进bios设置u盘启动...
  13. Java字节码角度分析:Synchronized ——提升硬实力11
  14. 软件测试体系学习及构建(8)-HTML之图像,表格,列表,区块
  15. 基于java的一款实时聊天系统,包含服务端 + 客户端 + web端
  16. android拷机工具,Android 3DMark大更新:无敌拷机神器
  17. 天还是那个天,从前却不再是那个从前
  18. java进阶--深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
  19. android 多个按钮居中,Android手机开发 使用线性布局和相对布局实现Button垂直水平居中...
  20. OpenCV这么简单为啥不学——1.5、解决putText中文乱码问题

热门文章

  1. Rocksdb prefix Bloomfilter
  2. 安卓实现下拉刷新上拉加载
  3. MSDN Webcast所有视频讲座的下载地址
  4. Hibernate save()与persist()区别
  5. python输出字符串排列组合代码
  6. Pytorch学习日志之函数用法记录
  7. 如何使用Redis缓存 ?
  8. html如何连接外部样式表,怎么链接外部css文件?
  9. 让线程实现暂停,重新启动,停止
  10. ora-12505 监听程序当前无法识别sid