1. 基础

初学程序设计时,比较容易混淆的两个概念是数学函数(math function)和程序中使用的函数。

在数学函数中 y=f(x),一个输入值有固定的输出值。例如,无论计算多少次,sinπ 的结果总是 0。如果 f(x)=x/2,那么 f(10) 无论计算 100 次还是 1000 次,其结果都是 5.

程序设计中的函数却不具备这种稳定的特性,因为函数的执行不仅依赖于输入值,而且会受到全局变量,输入文件,类的成员变量等诸多因素的影响。如下:

int counter = 0;
int count(){
return ++counter;
}

此函数输入没有输入值,但每次都返回不同的结果。当然,就像数学函数那样,程序中函数还可以设计成“对同一输入值每次都返回相同结果”的形式。

函数的返回值只依赖于其输入值,这种特性就称为引用透明性(referential transparency)

2. 动态规划的缓存

显然,动态规划所使用的制表法(也即缓存)只能应用于具有引用透明性的函数。如果外在因素使相同输入值返回不同结果值,则不能缓存。

也即缓存对应的 map,实现的是同一个输入(key),同一个输出(value),而不可能出现同一个输入,可以得到不同的输出,也即输出结果的不确定性。

函数的引用透明性(referential transparency)的更多相关文章

  1. PHP引用(&)初探:函数的引用返回

    函数的引用返回 先看代码: <?php function &test() { static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } ...

  2. php 在函数内引用全局变量 讲解引用

    <?php $var1 = "Example variable"; $var2 = ""; function global_references($use ...

  3. javascript 在一个函数参数中包含另一个函数的引用

    javascript函数的参数包含另一个函数的情形: <script> //b函数的参数func为另一个函数 function b(a, func) {  alert(a); //调用参数 ...

  4. PHP 函数的“引用返回”概念释疑(转)

    很多时候我们会看到这样的代码(出自 CI 框架源码): 1 $class =& load_class('a','b'); 我们都知道其中的'&'是指引用,但是它的作用是什么呢?它能够解 ...

  5. php变量的引用及函数的引用

    Php变量的引用及函数的引用放回 变量的引用    $a="ABC";    $b =&$a;    echo $a;//这里输出:ABC    echo $b;//这里输 ...

  6. perl 函数回调 引用$client->run(sub {$client->sync});

    匿名函数引用: [root@wx03 wx]# perl a1.pl CODE(0x2077b30) test [root@wx03 wx]# cat a1.pl $ref= sub {return ...

  7. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  8. php对函数的引用

    function &example($tmp=0){                  //定义一个函数,别忘了加“&”符     return $tmp;              ...

  9. php函数返回引用示例

    <?php class Test { public $userCache; public function init() { for($i = 0; $i < 5; $i++) { $us ...

随机推荐

  1. vim 解决tags递归查询问题

    今天在vim下配置了两个插件,分别是exuberant-ctags 跟cscope.这两个插件主要是用来实现类.方法查询跟跳转.至于它们如何安装跟使用,网上教程一大堆,我也是按着别的大神教程一步步来的 ...

  2. Think Pad笔记本分区解决思路及方法

    Think pad笔记本分区解决思路及方法       近日好友拿着新买的Thinkpad X300过来找我,说这个笔记本只有一个分区,所有的东西不得放在C盘,希望再多分出几个分区.抱怨原先在wind ...

  3. golang-nw

    http://godoc.org/github.com/lonnc/golang-nw golang webkit golang walk

  4. SpringMVC-@RequestMapping的参数和用法

    RequestMapping里面的注解包含的参数如图: RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. ...

  5. Block Manager

    在Spark中,将数据抽象为Block(不论是shuffle数据,还是节点本身存储的数据),而每个driver/executor中的block都是由`BlockManager`这个类来负责管理的.对于 ...

  6. Python day2 知识回顾

    标准库一般放在lib,site-packages放自己下载的:起的py文件名称不要和模块名字相同:import sys#print(sys.path)#打印去哪里寻找这些模块的路径#print(sys ...

  7. 交换工资 SQL

  8. 源代码编译安装CloudStack 4.2

    基于CentOS 6.4安装CloudStack 环境配置 # yum -y update # yum -y upgrade 安装NTP,jdk 1.7, tomcat 6, mysql,git等服务 ...

  9. 18.C语言多线程总结

    创建一个线程 _beginthread(myfun, , NULL);//返回值是一个HANDLE hd[i] = CreateThread(NULL, , add, NULL, , NULL);// ...

  10. golang webservice[ json Martini webframe]

    golang webservice[ json Martini webframe] https://github.com/brunoga/go-webservice-sample 自己修改了一下例子, ...