您的位置:首页 > Web前端 > JavaScript

JS实现函数递归、运用技巧

2018-01-13 11:53 351 查看


前言

所谓的递归函数就是在函数体内调用本函数。使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用 ,比如阶乘问题。


递归计算阶乘的例子

<!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 arguments