javascript中递归函数
来源:互联网 发布:python 冒泡排序 编辑:程序博客网 时间:2024/05/19 02:29
由于javascript的函数式编程特性,很多在其他其他语言中合法的操作在js中会产生错误,例如运行如下代码
function Fibonacci(n){ if(n <= 1) return n; return Fibonacci(n-1) + Fibonacci(n-2);}for(var i = 0;i < 10;i++) console.log(i+":"+Fibonacci(i));var FibonacciCopy = Fibonacci;Fibonacci = null;for(i = 0;i < 10;i++){ console.log(i+":"+FibonacciCopy(i));}
运行结果
0:01:12:13:24:35:56:87:138:219:340:01:1/usr/local/JavaScript/Fib.js:4 return Fibonacci(n-1) + Fibonacci(n-2); ^TypeError: Fibonacci is not a function at Fibonacci (/usr/local/JavaScript/Fib.js:4:9) at Object.<anonymous> (/usr/local/JavaScript/Fib.js:12:20) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:383:7) at startup (bootstrap_node.js:149:9)
在将斐波那契函数赋给另一个变量之后并将自身赋为null后,递归失败
有两种方法解决这个问题,第一种方式是借助arguments.callee
,arguments.callee
是一个指向当前正在运行的函数的指针
function Fibonacci(n){ if(n <= 1) return n; return arguments.callee(n-1) + arguments.callee(n-2);}for(var i = 0;i < 10;i++) console.log(i+":"+Fibonacci(i));var FibonacciCopy = Fibonacci;Fibonacci = null;for(i = 0;i < 10;i++){ console.log(i+":"+FibonacciCopy(i));
用arguments.callee
进行递归之后,函数正常递归,但在严格模式下无法访问arguments.callee
第二种方法是命名函数表达式
var Fibonacci = (function f(n){ if(n <= 1) return n; return f(n-1) + f(n-2);})for(var i = 0;i < 10;i++) console.log(i+":"+Fibonacci(i));var FibonacciCopy = Fibonacci;Fibonacci = null;for(i = 0;i < 10;i++){ console.log(i+":"+FibonacciCopy(i));
0:01:12:13:24:35:56:87:138:219:340:01:12:13:24:35:56:87:138:219:34
同样运行正常
阅读全文
0 0
- javascript中递归函数
- JavaScript递归函数
- JavaScript递归函数
- JavaScript函数和递归
- JavaScript中的递归函数
- JavaScript函数,递归
- JavaScript的递归函数
- JavaScript中的递归函数问题
- php中递归函数
- JavaScript中,二分法递归示例
- JAVASCRIPT里的函数递归用法
- JavaScript 如何快速得写出递归函数
- JavaScript 支持函数的递归调用
- JavaScript回调函数和递归函数
- lua递归函数中变量
- PHP中使用递归函数
- 【javascript】javascript中编码函数
- javascript学习之函数(9)—— 函数 递归
- 常见的网页错误编码以及解决的方法
- android app开发中将表情图片上传到服务器并获取显示
- SpringBoot之Hello world篇
- Linux下运行bash脚本显示“: /usr/bin/env: "bash\r": 没有那个文件或目录
- springmvc ResponseEntity 下载文件损坏问题解决方法
- javascript中递归函数
- bzoj1211 [HNOI2004]树的计数 prufer序列+组合数
- Java设计模式之外观模式
- 使用Bootstrap tab切换引入echarts图表。第一个tab显示正常,
- tensorflow_1 小试牛刀
- LeetCode 120. Triangle
- 对Center loss的理解
- 浏览端渲染性能相关(转自google开发者中心)
- 清除Css中select的下拉箭头样式