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 ... 
随机推荐
- 1.org.hibernate.MappingException: No Dialect mapping for JDBC type: -9
			org.hibernate.MappingException: No Dialect mapping for JDBC type: -9 原因:Hibernate框架的方言(Dialect )没有数据 ... 
- 手把手教程 Surface如何进行系统恢复?
			手把手教程 Surface如何进行系统恢复? 2015-01-29 05:53:00 [ 中关村在线 原创 ] 作者: 周博林 | 责编:周博林 收藏文章 分享到 评论(10) Windo ... 
- 原来ipad的浏览器也可以直接clip到evernote
			今天才发现是有方法通过邮件方式保存ipad上浏览的内容到evernote,之前以为要反复切换app来做到. 只要在toread.cc登记evernote对应帐号的邮箱,就可以根据toread返回到ev ... 
- Ubuntu adb devices 出现??? no permissions 的解决方法
			在ubuntu 12.10下运行adb devices出现: List of devices attached ???????????? no permissions 1.用命令: lsusb 以 ... 
- java 集合类说明与区别
			集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap ... 
- poj2186 Popular Cows --- 强连通
			给一个有向图,问有多少结点是其它全部结点都能够到达的. 等价于,在一个有向无环图上,找出度为0 的结点.假设出度为0的结点仅仅有一个,那么这个就是答案.假设大于1个.则答案是0. 这题有环.所以先缩点 ... 
- 【Cocos2d TestCpp实例模仿一】-- ActionsTest
			转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/25252539 CCActionInterval(持续性动作) 位置性变化动作以To结束 ... 
- 【ActionBar的使用】
			在AS工程中使用ActionBar 简单实用: 1.功能清单文件中指定主题标签属性Theme.Holo或其子类 <application android :theme="@androi ... 
- 在 Visio 中录制宏
			在“开发工具”选项卡上,单击“录制宏”.(如果您看不到“开发工具”选项卡,请参阅下面的“显示‘开发工具’选项卡”.) 在“宏名”框中,键入宏名称. 在“快捷键”框中,键入与 Ctrl 键一起使用可运行 ... 
- The Rose
			Some say love it is a river 有人说爱是一条河 that drowns the tender reed 会淹没轻柔的芦苇 Some say love it is a razo ... 
