JS实现函数递归、运用技巧
前言
所谓的递归函数就是在函数体内调用本函数。使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用 ,比如阶乘问题。
递归计算阶乘的例子
<!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实现函数递归、运用技巧相关推荐
- JS 函数 函数递归
微信小程序开发交流qq群 173683895 承接微信小程序开发.扫码加微信. 重要:函数也是对象,你可以给它们添加属性或者更改它们的属性. 函数内部对象:arguments 解析:函数实际 ...
- 41 JS函数递归调用
文章目录 1.概念 2.应用 3.案例:求斐波那契数列第N项的值 1.概念 递归调用是函数嵌套调用中一种特殊的调用.它指的是一个函数在其函数体内调用自身的过程,这种函数称为递归函数. 2.应用 下面以 ...
- java 7.函数-递归_带有谓词的Java中的函数样式-第2部分
java 7.函数-递归 在本文的第一部分中,我们介绍了谓词,这些谓词通过具有返回true或false的单一方法的简单接口,为Java等面向对象的语言带来了函数式编程的某些好处. 在第二部分和最后一部 ...
- Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数【含代码】)- 案例篇
文章目录 Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数[含代码])- 案例篇 效果截图: 重要代码: 附:全部HTML代码: Ajax异步请求(重渲染DOM元素时,如何自动调 ...
- 【C语言】函数递归(详解)
文章目录 函数递归 什么是递归? 递归的俩个必要条件 代码引例1 栈溢出(Stack Overflow) 合理使用递归 代码引例3 代码引例4 解释要合理使用递归 结束语 函数递归 程序调用自身的编程 ...
- C语言函数递归—经典递归问题
目录 一.什么是递归? 二. 汉诺塔问题 2.1 认识什么是汉诺塔 2.2 汉诺塔打印步数 2.3 汉诺塔打印步骤 三.青蛙跳台阶问题 一.什么是递归? 这里我们先简单的认识一下什么是函数递归:我们可 ...
- 【C语言】函数 ---- 函数的嵌套调用和链式访问、函数的声明和定义、变量的声明和定义、函数递归与迭代、递归时的栈溢出问题
函数 一.函数的嵌套调用和链式访问 1.嵌套调用 2.链式访问 2.1strlen()函数 2.2printf()函数 二.函数的声明和定义 1.函数声明和定义的介绍 2.函数声明和定义的使用 三.变 ...
- 对于C语言函数递归的简单理解(新手入门必看!!!)
什么是函数递归? 程序调用自身的编程技巧称为递归(recursion). 递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型 ...
- python函数递归年龄,python之函数递归
函数递归调用 在函数内部,可以调用其它函数,如果一个函数在内部调用自身,即是递归调用 为防止无限递归类似于死循环,需要如下: 1.必须要有一个明确的返回值: 2.每次进入更深一层递归时,问题规模应该比 ...
最新文章
- F# 4.5提供Spans、Match!等特性
- ubuntu install fonts
- Git show-branch显示提交信息
- dynamodb java_使用Java将项目插入DynamoDB表
- java 基本类型 引用类型_Java中的基本类型和引用类型变量的区别
- 论文浅尝 | 通过文本到文本神经问题生成的机器理解
- 5.abp框架code first方式删除表
- 【黑客免杀攻防】读书笔记15 - 源码免杀、C++壳的编写
- java汉字转拼音区别多音字_Java中汉字转拼音pinyin4j用法实例分析
- matlab不定积分曲线族画图,matlab不定积分
- ssh连接阿里云服务器报错 Server responded ”Algori thm negotiation failed.”
- 曙光服务器如何重新设置u盘启动_u盘装曙光服务器 曙光服务器进bios设置u盘启动...
- Java字节码角度分析:Synchronized ——提升硬实力11
- 软件测试体系学习及构建(8)-HTML之图像,表格,列表,区块
- 基于java的一款实时聊天系统,包含服务端 + 客户端 + web端
- android拷机工具,Android 3DMark大更新:无敌拷机神器
- 天还是那个天,从前却不再是那个从前
- java进阶--深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
- android 多个按钮居中,Android手机开发 使用线性布局和相对布局实现Button垂直水平居中...
- OpenCV这么简单为啥不学——1.5、解决putText中文乱码问题