JS实现递归要注意的问题
来源:互联网 发布:nike篮球鞋淘宝店铺 编辑:程序博客网 时间:2024/05/17 08:40
前言
所谓的递归函数就是在函数体内调用本函数。使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用 ,比如阶乘问题。
递归计算阶乘的例子
<!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 指向正在执行的函数的指针。
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);}
1 0
- JS实现递归要注意的问题
- js 递归编程要注意的:return
- 几个经典递归问题用js实现
- 动态增加表单项时JS要注意的问题
- 汉罗塔问题的递归实现
- 汉诺塔问题的递归实现
- 汉诺塔问题的递归实现
- 汉诺塔问题的递归实现
- js string 转 int 注意的问题
- JS需要注意的一个问题
- js string 转 int 注意的问题
- js数组 应该注意的问题
- 新手js中注意的问题
- xhconn.js中需要注意的问题
- 递归调用里的性能问题(js)
- 拦截系统调用的实现以及要注意的问题
- 快速排序的js递归实现
- cocos2d-js注意问题
- Mybatis传多个参数解析
- pl/sql编程
- Python—OpenCV学习网站
- SQL总结(二)
- C语言复习题1.2
- JS实现递归要注意的问题
- IO流--DataInputStream与DataOutputStream
- linux中驱动异步通知应用程序的方法
- 个人学习c++的真实经验!
- 有关我们经常会看到德 nonnull和nullable 关键字的使用
- 微信的名词解释
- 浅析Python编码问题
- IO流--ByteArrayStream
- Android SDK开发范例大全 ---3.3更改TextView颜色