1. 基础

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

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

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

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

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

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

2. 动态规划的缓存

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

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

函数的引用透明性(referential transparency)相关推荐

  1. 论文阅读——Testing Machine Translation via Referential Transparency

    https://arxiv.org/pdf/2004.10361.pdf 通过引用透明性测试机器翻译 Github:https://github.com/ReferentialTransparency ...

  2. c++ 函数返回引用

    一,c++函数的返回分为以下几种情况 1)主函数main的返回值:这里提及一点,返回0表示程序运行成功. 2)返回非引用类型:函数的返回值用于初始化在跳用函数出创建的临时对象.用函数返回值初始化临时对 ...

  3. C++ 函数的引用返回值

    C++ 函数的引用返回值 2009-09-17 09:29 引用是给变量取一个别名,所以引用传递会直接进行变量本身的传递.它的最大好处是可以把别处对变量的改变保留下来,第二好处是它提高了性能:如果函数 ...

  4. 【PHP】函数的引用返回

    欢迎大家访问我自己架的博客站点 码厩技术博客! PHP:函数的引用返回 遇到函数声明时前面加引用符号的情况. 调用函数时加引用符号可以理解,就是声明的接受变量是一个引用嘛. (实验证明,这是错的,说引 ...

  5. Linux Kernel ‘_xfs_buf_find()’函数空指针引用拒绝服务漏洞

    漏洞名称: Linux Kernel '_xfs_buf_find()'函数空指针引用拒绝服务漏洞 CNNVD编号: CNNVD-201303-071 发布时间: 2013-03-06 更新时间: 2 ...

  6. C++基础08-this指针-const修饰成员函数-函数返回引用/值

    一.this指针 1.C++类对象中的成员变量和成员函数是分开存储的.C语言中的内存四区模型仍然有效! 2.C++中类的普通成员函数都隐式包含一个指向当前对象的this指针. 3.静态成员函数.成员变 ...

  7. php函数传引用,关于php:函数调用通过引用传递?

    我在cas.module的第245行drupal CAS模块中看到了一些我并不完全理解的东西: $initialized = &drupal_static(__FUNCTION__, FALS ...

  8. PHP函数的引用传递(地址传递)

    PHP中的引用: 在PHP中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字.在PHP中引用意味着用不同的名字访问同一个变量的内容. 比如:$a = 'hello world'; $b = ...

  9. 函数重载函数的引用算重载吗_了解C ++中的函数重载

    函数重载函数的引用算重载吗 介绍 (Introduction) Today in this tutorial, we are going to understand the concept of Fu ...

最新文章

  1. 共享文件时提示“将安全性信息应用到以下对象时发生错误”
  2. 网络蜘蛛Spider 工作原理
  3. 20220202--CTF刷题MISC方向--第5题--反编译
  4. Apache+php+mysql安装与配置详解
  5. 3d000: no database selected_No.[C9]020
  6. fortran安装_如何在 CentOS 8 上安装 GCC
  7. python的基础 杂项(十四)
  8. Base64转BufferedImage
  9. Android 第二课——命令行基本操作
  10. 写web项目时出现的错误:来自“http://localhost:63342/Demo/test01/day0618/css/a.css”的资源已被阻止,因为 MIME 类型(“text/html”)
  11. 我的数据分析师转型之路,从零到字节跳动数据分析师
  12. Spring Boot如何设置开发模式
  13. tdd(测试驱动开发)的概述
  14. 四两拨千斤的工作小工具分享
  15. 解决VS 2017/2019社区版无法登陆的方法
  16. GitHub开源组件集锦
  17. 如何将一个应用添加开机启动项
  18. 老师对计算机课的评语,信息技术课堂教学评价与反思
  19. 第25章 JDBC核心技术第3节
  20. 三、GAMIT解算之分步处理

热门文章

  1. android自定义横竖双向滚动,Android开发实现自定义水平滚动的容器示例
  2. 【深度学习小知识】ROI到ROI pooling 再到ROI Align
  3. opencv项目实践一(答题卡识别)
  4. 解决mac右键谷歌翻译失效
  5. Qt(C++)入门学习
  6. python实现炫酷字母雨
  7. 黑马程序员——集合框架
  8. 第三方账号登陆-sina微博_PC篇
  9. 舞钢大业投资王恒:央行再度定向降准力挺“三农”小微覆盖大部分的城市商业银行
  10. Lambda表达式-常见的函数式接口