一、什么是尾调用? 尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 上面代码中,函数f的最后一步是调用函数g,这就叫尾调用。 以下两种情况,都不属于尾调用。 上面代码中,情况一是调用函数g之后,还有别的操作,所以不属于尾调用,即使语义完全一样。情况二也属于调用后还 ...
分类:
其他好文 时间:
2017-08-05 17:55:56
阅读次数:
135
#递归函数
#在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数
#计算n!
deffact(n):
ifn==1:
return1
returnn*fact(n-1)
print(fact(1))
print(fact(5))
#递归函数的优点是定义简单,逻辑清晰
#理论上,所有的递归函数都可以写成循环..
分类:
编程语言 时间:
2017-08-03 20:09:23
阅读次数:
137
Python递归 如果一个函数在内部调用函数自身,这个函数就是递归函数; 下面看一个经典例子:利用Python递归求阶乘 经过CPS变换消除general recursion, 尾递归优化 尾递归基于函数的尾调用,每一级调用直接返回函数的返回值更新调用栈,而不用创建新的调用栈,类似迭代的实现,时间和 ...
分类:
编程语言 时间:
2017-07-22 20:00:35
阅读次数:
273
虽然偶尔也用过,但是从来没具体来整理过 普通递归: 这是个阶乘。但是占用内存,因为: fac(5) (5*fac(4)) (5*(4*fac(3))) (5*(4*(3*fac(2)))) (5*(4*(3*(2*fac(1))))) (5*(4*(3*2))) (5*(4*(6))) (5*24) ...
分类:
编程语言 时间:
2017-07-19 19:27:48
阅读次数:
166
快速排序,尾递归。最坏情况下栈深度Θ(lgn) ...
分类:
编程语言 时间:
2017-07-03 14:01:40
阅读次数:
223
函数式编程 函数式编程的三大特性: immutable data 不可变数据 first class functions 尾递归优化 函数式编程的准则:不依赖于外部的数据,而且也不改变外部数据的值,而是返回一个新的值给你。 如何变得functional: 1. 没有共享变量 2.通过参数和返回值传递 ...
分类:
其他好文 时间:
2017-06-27 23:38:28
阅读次数:
202
n!=n*(n-1)! import java.io.BufferedReader; import java.io.InputStreamReader; /** * n的阶乘,即n! (n*(n-1)*(n-2)*...1)。 * 0!为什么=1,由于1!=1*0!。所以0!=1 * * @auth ...
分类:
编程语言 时间:
2017-06-18 22:41:55
阅读次数:
196
1、递归的定义 函数直接或间接的调用自己 使用递归时,必须有明确的结束递归的条件 2、递归的适用场合 数据的定义按照递归定义(比如求n!) 问题的解法适用于使用递归 数据的结构是按递归定义的(比如二叉树) 3、线性递归 也就是普通递归,下一次递归数据的计算要依赖于上一次递归的结果和参数,当数据量较小 ...
分类:
其他好文 时间:
2017-05-31 23:07:12
阅读次数:
225
有一区间列表ranges [[0, 2], [4, 6], [8, 10], [12, 14]],按序排列好了的,没有交集。现在有一新范围range_new [4, 9],进行合并。 采用递归思想,可以用range_new依次和ranges中的范围比较 如果range_new是子集,直接返回 如果r ...
分类:
其他好文 时间:
2017-05-19 09:54:22
阅读次数:
156
尾递归 前言:今天上网看帖子的时候,看到关于尾递归的应用(http://bbs.csdn.net/topics/390215312),大脑中感觉这个词好像在哪里见过,但是又想不起来具体是怎么回事。如是乎,在网上搜了一下,顿时豁然开朗,知道尾递归是怎么回事了。下面就递归与尾递归进行总结,以方便日后在工 ...
分类:
其他好文 时间:
2017-05-13 23:18:44
阅读次数:
285