javascipt 的 Fibonacci 数列优化
2016-12-04 17:30
323 查看
javascipt 的 Fibonacci 数列优化
Fibonacci数列是递归函数的典型事例。一个Fibonacci数字是之前两个Fibonacci数字之和;最前面两个数字是0和1。 递归函数
var fibonacci = fucntion (n) { return n < 2 ? n : fibonacco(n - 1) + fibonacci(n - 2); }; for (var i = 0; i <= 10; i +=1 ) { document.write('//' + i + ':' + fibonacci(i) ); }
这样的函数做了很多无谓的工作,我们调用了11次 fibonacci,而它自身调用了442次计算可能已被计算过的值,可使用Javascript的『记忆』"memoization"功能。 使用一个memo的数组保存结果,结果隐藏在闭包中。当函数被调用时,这个函数首先检查结果是否已存在,如果存在,就立即返回这个结果。
var fibonacci = function () { var memo = [0,1]; var fib = function (n) { var result = memo ; if (typeof result !== 'number') { result = fib(n - 1) + fib(n - 1) +fib(n); memo = result; } return result; }; return fib; }();
我们调用了11次,它调用了18次取得之前的存储的结果。
可以把这种技术推而广之,编写一个函数来帮助我们构造带记忆功能的函数。memoizer函数取得一个初始的memo数组和formula函数。它返回一个管理memo存储和在需要时调用的formula函数。
var memoizer = function (memo, formula) { var recur = function (n) { var resule = memo ; if(typeof result != 'number') { result = formula (recur,n); memo = result; } return recur; } } var fibonacci = memoizer([0,1], function (recur, n) { return recur (n - 1 ) + recur (n - 2) };
相关文章推荐
- Fibonacci(斐波纳契)数列各种优化解法
- 斐波那契数列--之优化(Fibonacci)
- Fibonacci(斐波纳契)数列 入门递归,算法优化(记忆化搜索),迭代法
- Fibonacci(斐波纳契)数列各种优化解法
- 算法之数列 Fibonacci
- 求斐波那契(Fibonacci)数列通项的七种实现方法
- 费波纳切(Fibonacci)数列的前N项和公式(PHP版)三种算法的比较
- 斐波那契(Fibonacci)数列
- FizzBuzz and Fibonacci优化
- 七种方式求斐波那契(Fibonacci)数列通项
- Fibonacci 数列第 N项 O(logN)算法
- Fibonacci数计算中的两个思维盲点及其扩展数列的通用高效解法
- Fibonacci 数列
- 读书笔记之编程之美 - 2.9 斐波那契(Fibonacci)数列
- Fibonacci斐波那契数列-实现2
- [AHOI2009] BZOJ2431 逆序对数列-动态规划-前缀和优化
- 微软面试100题之19题:定义Fibonacci 数列如下,用最快的方法求该数列的第n 项
- 七种方式求斐波那契(Fibonacci)数列通项
- fibonacci 数列--C++
- mips汇编语言实现Fibonacci(斐波那契)数列