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
原创粉丝点击