js 记忆函数

使用js记忆函数来计算菲波那切数列、阶乘等,可以极大减少我们必须要做的工作,加速程序计算。

1.编写记忆函数memoizer

var memoizer = function(memo, fundamental) {	//memo记忆数组和fundamental函数

	//管理memo存储、何时调用fundamental
	var shell = function(n) {
		var result = memo[n];
		if(typeof result !== ‘number‘) {
			result = fundamental(shell, n);
			memo[n] = result;
		}
		return result;
	};
	return shell;
};

2.菲波那切数列

//用memoizer定义fibonacci函数
var fibonacci = memoizer([0, 1], function(shell, n) {
	return shell(n - 1) + shell(n - 2);
});

fibonacci(10);
>  55  //结果

3.阶乘

//用memoizer定义factorial函数
var factorial = memoizer([1, 1], function(shell, n) {
	return n * shell(n - 1);
});

factorial(10);

>  3628800    //结果

  

时间: 2024-08-08 15:24:13

js 记忆函数的相关文章

记忆函数功能

使用JS记忆函数功能,能够有效提供代码的性能. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>记忆函数</title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11 <script>

js:深入函数的定义

函数定义方式: 1.function fun1(){alert("fun1");}  //函数就是一个非常特殊的对象,是一个Function的实例,其实在内存中存储的操作是通过一个键值对来存储的. 2.由于函数是一个对象,所以可以通过如下方式定义 var fun2 = fun1;  //通过函数拷贝给fun2完成赋值,但fun1.fun2这两个引用并没有指向同一个对象(虽然他们指向的对象的内容是一样的). fun1 = function(){alert("fun111&quo

对JS中函数的理解

函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能) var fn=function(a){return a+100;} fn=function(a){return a+200;} alert(fn(100)); //300 要访问函数的引用(指针)而不是执行函数时,必须去掉圆括号,加上圆括号表示访问函数执行后的结果 函数体内部的语句在执行时,一旦

js中函数参数值传递和引用传递

js中函数参数值传递和引用传递:在阅读本章节之前建议参阅一下两章节:1.值类型可以参阅javascript的值类型一章节.2.引用类型可以参阅javascript的引用类型一章节.一.函数传递值类型:代码实例如下: function addNum(num) { num+=10; return num; } var num=10; var result=addNum(num); console.log(num); console.log(result); 以上代码的弹出值分别为:10和20,下面进

JS中函数定义的三种格式

第一种:function  fun1(参数1,参数2...){            //通过创建函数名来定义函数 函数体: } 第二种:var fun2=new Function("参数1,参数2...","函数体");         //通过创建变量来定义函数 第三种:function(){                //匿名函数 函数体: } 说明: 1,在调用时,可以为没有参数的函数传递参数:但如果没有传递参数给有参数的函数时,会默认参数为undefi

在js自定义函数中使用$(event.target)代替$(this)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <ti

url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介

url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介 2014年10月12日 16806次浏览 引子 浏览器URl地址,上网一定会用到,但是浏览器地址有中文或者浏览器url参数操作的时候,经常会用到encodeURIComponent()和decodeURIComponent()以及encodeURI()等等.关于浏览器参数操作,请看文章http://www.haorooms.com/post/js_url_canshu ,今天主要讲讲e

【js】函数问题

一.函数重载问题: 由于js的函数传入的参数当做arguments对象(和数组类似,但不是Array的实例),传入的参数类型和数量没有限制,没有函数签名,所以如果要实现重载功能 的话,只能是不够完美得实现: function doAdd(num1,num2){ if(arguments.length==1){ console.log(num1+10); } else if (arguments.length==2){ console.log(num1+num2); } } 这里可以通过传入的参数

Js slice函数整理

今天做项目的时候碰到了,随手整理一下备用. ----slice 把元素从数组中筛选出来的函数,slice(开始位置,结束位置) --------------------------一下摘自W3C-------------------------------- start 必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推. end 可选.规定从何处结束选取.该参数是数组片断结束处的数组下标.如果没有指定该参数