泗县做网站,白杨seo,做网站是用源码还是模版,设计网站项目描述从一个熟悉的Fibonacci数列的实现开始:
function Fibonacci (n) {if ( n 1) { return 1};return Fibonacci(n -1) Fibonacci(n-2);
}以上代码很简单… 但执行以下代码
console.log(Fibonacci(100));会发现编译工具,卡住不动. 原因在于:递归调用(函数调用自身),每次都会…从一个熟悉的Fibonacci数列的实现开始:
function Fibonacci (n) {if ( n 1) { return 1};return Fibonacci(n -1) Fibonacci(n-2);
}以上代码很简单… 但执行以下代码
console.log(Fibonacci(100));会发现编译工具,卡住不动. 原因在于:递归调用(函数调用自身),每次都会占用一定内存来保存调用帧…Fibonacci(100),直接导致堆栈溢出…
解决方法: 改为尾递归调用(代码如下):
function Fibonacci2(n, ac11, ac21){if (n 1) {return ac2};return Fibonacci2(n-1, ac2, ac1ac2);
}执行以下代码看看:
console.log (Fibonacci2(100));
console.log(Fibonacci2(1000));诶,成功了… 下面介绍优化的原理:
// 考虑函数:
function f(){let m 1;let n 2;return g(mn);
}
f();// 等同于
function f() {return g(3);
}
f();// 等同于
g(3)函数f(),最后一步都是调用g(). 最终的调用帧可以缩减到1个g(3)… 因此大大的减少了内存的消耗
参考 《ES6标准入门》(第3版) P126