我们先来看看下面的例子~ 运行结果: 解释: 将函数(不带括号)赋值给一个变量,会复制对函数的引用,将括号放在函数名的末尾,调用函数,函数返回值赋给变量。 ...
分类:
其他好文 时间:
2018-08-03 16:20:12
阅读次数:
156
编程的方法论: 面向过程 面向对象 函数式 函数式编程的定义: 函数式=编程语言定义的函数+数学意义上的函数(先想到一个数学模型,再用python上的功能实现这个逻辑) 特性: 1.不用变量保存状态,意思就是不赋值,而且不修改变量 2.第一类对象:函数即变量 3.返回值当中包含函数 4.尾调用:在函 ...
分类:
其他好文 时间:
2018-05-06 12:18:23
阅读次数:
177
尾调用是指在函数return时直接将被调函数的返回值作为调用函数的返回值返回,尾调用在很多语言中都可以被编译器优化, 基本都是直接复用旧的执行栈, 不用再创建新的栈帧, 原理上其实也很简单, 因为尾调用在本质上看的话,是整个子过程调用的最后执行语句, 所以之前的栈帧的内容已经不再需要, 完全可以被复 ...
分类:
其他好文 时间:
2017-09-04 22:45:41
阅读次数:
214
一、什么是尾调用? 尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 上面代码中,函数f的最后一步是调用函数g,这就叫尾调用。 以下两种情况,都不属于尾调用。 上面代码中,情况一是调用函数g之后,还有别的操作,所以不属于尾调用,即使语义完全一样。情况二也属于调用后还 ...
分类:
其他好文 时间:
2017-08-05 17:55:56
阅读次数:
135
Python递归 如果一个函数在内部调用函数自身,这个函数就是递归函数; 下面看一个经典例子:利用Python递归求阶乘 经过CPS变换消除general recursion, 尾递归优化 尾递归基于函数的尾调用,每一级调用直接返回函数的返回值更新调用栈,而不用创建新的调用栈,类似迭代的实现,时间和 ...
分类:
编程语言 时间:
2017-07-22 20:00:35
阅读次数:
273
Collection的iterator方法返回一个实现了一个Iterator接口的对象 Iterator接口中包含三个方法: 1)E next() 2)boolean hasNext() 3)void remove 具体用法: 可以通过调用hasNext()判断是否达到集合的末尾 调用next()方 ...
分类:
编程语言 时间:
2017-07-06 18:34:53
阅读次数:
152
参考:http://www.ruanyifeng.com/blog/2015/04/tail-call.html 什么是尾递归呢? 函数最后一步是调用自身,就称为尾递归。 尾递归可以用循环实现。 什么是尾调用: 某个函数的最后一步是调用另一个函数。 上面代码中,函数f的最后一步是调用函数g,这就叫尾 ...
分类:
其他好文 时间:
2017-04-24 12:25:41
阅读次数:
121
个人:尾调用时函数式编程的一个重要概念, 栈溢出: 函数调用会在内存形成一个“调用记录”,又称“调用帧”(call frame),保存调用位置和内部变量等信息。如果在函数A的内部调用函数B,那么在A的调用帧上方,还会形成一个B的调用帧。等到B运行结束,将结果返回到A,B的调用帧才会消失。如果函数B内 ...
分类:
其他好文 时间:
2017-04-21 09:41:17
阅读次数:
169
参考:http://www.ruanyifeng.com/blog/2015/04/tail-call.html 感谢阮老师。 尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 如果尾调用自身,就称为尾递归。 递归的写法推荐用尾递归。 ...
分类:
其他好文 时间:
2017-02-06 00:12:28
阅读次数:
148