Javascript 递归函数
递归函数就是在函数内部调用它自己。在Javascript 中有很多写法,值得我们学习一下(Javascript太灵活了)。还是用n的 阶乘 来写例子吧.
1. 首先,来看一个最普通 最正常的写法。
function fac(num) {
if (num < 2) {
return 1;
} else {
return num * fac(num - 1);
}
}
var temp = fac;
fac = null;
alert(temp(5));
但是这种写法有一个问题就是,存在一些特殊场景,我们可能需要把fac函数赋值给其它对象,这时在调用这个对象的时候可能会出现问题。就像上面代码所示的调用。
2. 这时我们使用Javascript中arguments.callee 来解决这种耦合的问题。但是 在严格模式下,不能使用这种方式。
function fac(num) {
//"use strict";
if (num < 2) {
return 1;
} else {
return num * arguments.callee(num - 1);
}
}
alert(fac(5));
注意:严格模式:在作用域中添加 "use strict" 就进入严格模式。但是 "use strict" 不论前面 后面 还是中间 都不能添加空格,不然无效。
3. 可以使用函数表达式来实现同样的功能。
var fac = (function f(num) {
if (num < 2) {
return 1;
} else {
return num * f(num - 1);
}
});
var temp = fac;
fac = null;
alert(temp(5));
Javascript 递归函数的更多相关文章
- javascript递归函数
递归函数:是指函数直接或间接调用函数本身,则称该函数为递归函数. 这句话理解起来并不难,从概念上出发,给出以下的例子: function foo(){ console.log("函数 foo ...
- JavaScript递归函数解“汉诺塔”
“汉诺塔”是一个著名的益智游戏.塔上有3根柱子和一套直径各不相同的空心圆盘.开始时柱子上的所有圆盘都按照从小到大的顺序堆叠.目标是通过每次移动一个圆盘到另一根柱子,最终把一堆圆盘移动到目标柱子上,过程 ...
- javascript 递归之阶乘
阶乘,即5! = 5*4*3*2*1, 先看传统的做法,利用while循环实现: function factorial(num){ var result = num; if(num<0){ re ...
- 如何使用javascript书写递归函数
递归函数大家都应该比较熟吧?那么,如何在javascript中书写一个完美的递归函数呢?且听我娓娓道来. 递归函数 写的时候,查了一下维基百科对递归函数的定义,恕我愚钝,简直太深奥了!所以,我还是简单 ...
- JavaScript中的递归函数问题
学过其它编程语言的都应该会知道递归这个问题,递归函数是在一个函数通过名字调用自身的情况下后构成的. function fac(num){ if(num<=1){ return 1; }else{ ...
- [译]Javascript中的递归函数
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- javascript中的递归函数
正常的递归函数如下: function factorial(num){ ){ ; }else{ ); } } 这个函数表面看起来还ok,但如果我们执行下面代码就会出错. var jenny = fac ...
- JavaScript中递归函数用法需要注意的
<script> function sum(num){ if(num<=1){ return 1; }else{ return num*sum(num-1);//return num ...
- JavaScript正则表达式检验与递归函数实际应用
JS递归函数(菲波那切数列) 实例解析: 一组数字:0 1 1 2 3 5 8 13 0 1 2 3 4 5 6 7 sl(0)=0; sl ...
随机推荐
- windows8设置环境变量
win8,win8.1如何配置java的环境变量 工具/原料 win8,win8.1 方法/步骤 在你的计算机上右击,选择其中的属性就可以了.如下图所示. 接下来,作出如下图所示的选择. 这个 ...
- android开源框架和开源项目(转)
特效: http://www.androidviews.net/ http://www.theultimateandroidlibrary.com/ 常用效果: 1. https://github.c ...
- Go语言简单的TCP编程
前期准备 需要import "net"包 IP类型,其中一个重要的方法是IP.ParseIP(ipaddr string)来判断是否是合法的IP地址 TCP Client func ...
- iso-开发基础知识-1-程序流程
main-应用程序委托-视图控制器 main()---主函数 应用程序委托 ---AppDelegate 视图控制器 ---ViewController - (BOOL)applicatio ...
- JSON.parse()的异常怎么处理;
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 如何在VMware虚拟机上安装Linux操作系统(Ubuntu)
作为初学者想变为计算机大牛非一朝一夕,但掌握基本的计算机操作和常识却也不是多么难的事情.所以作为一名工科男,为了把握住接近女神的机会,也为了避免当白痴,学会装系统吧!of course为避免把自己的电 ...
- SQL Server 使用ROW_NUMBER()进行分页
代码示例: WITH domain AS(SELECT ROW_NUMBER() OVER(ORDER BY ID DESC) ids,* FROM dbo.DomainInfo) SELECT * ...
- 20141014C#面向对象抽象方法,抽象类,接口
里氏代换原则.可以用子类的对象替代父类的对象. 抽象依赖原则.依赖——形参,关联 一.抽象方法: 在一些父类中,某些行为不是非常明确,因此无法用代码来具体实现,但是类必须具备此方法,因此把这样的方法定 ...
- button变成href (即按钮超链效果)
法一: 这种方法适合做单纯的HTML静态页面,因为它只有button的显示效果,但不能真的跳转.貌似是鸡肋,没多大用. 法二: 1.新打开一个页面 2.本页打开 在超链中实现打开新页面用targe ...
- oracle中 some、any、all 三者的区别及个人总结,归纳!
any :如果是大于号时( a > b ),那么a中所有大于b中最小的那个数的值,就会被输出出来. 如果是小于号时( a < b ),那么a中所有小于b中最大的那个数的值,就会被输出出来. ...