编程的奇淫技巧1——尾调用
2018-01-30 14:31
176 查看
尾调用
尾调用指的是函数func的返回值(或者函数最后一条语句)是对另一个函数
func2的调用。如果
func2和
func相同,就是尾递归咯。尾调用是个更广泛的概念。
效率
尾调用可以不在调用栈上增加新的栈帧,而是更新它,从而像迭代一样,因此尾递归仅占用常量的栈空间。例子
用wikipedia的代码例子来说明什么是尾递归。def recsum(x): if x == 1: return x else: return x + recsum(x - 1)
这里
recsum函数的返回值中
x+recsum(x-1)是一个表达式,在调用了
recsum(x-1)后还需要计算表达式的值,那么就需要继续保留原来
recsum(x)的调用栈,所以不是尾递归。
修改成尾递归的代码:
def tailrecsum(x, running_total=0): if x == 0: return running_total else: return tailrecsum(x - 1, running_total + x)
相关文章推荐
- 【VC编程技巧】动态链接库☞1.1调用Dll中的一个图标
- windows下java JNI编程技巧——JAVA调用c/c++(0)
- RCP编程技巧:在程序中如何调用ant?
- 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数
- windows下java JNI编程技巧——JAVA调用c/c++(1)
- windows下java JNI编程技巧——JAVA调用c/c++
- 使用C语言调用mysql数据库编程实战以及技巧
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇]
- 编程技巧:使用LINQ如何通过多次调用GroupBy实现分组嵌套
- 如何提高调用Window API函数编程技巧
- windows下java JNI编程技巧——JAVA调用c/c++(2)
- VB.NET编程技巧——调用windows系统常用功能(原创文章)
- Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇]
- windows下java JNI编程技巧——JAVA调用c/c++(3)
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇]
- windows下java JNI编程技巧——JAVA调用c/c++(4)
- 使用C语言调用mysql数据库编程实战以及技巧
- Matlab.NET混合编程技巧之直接调用Matlab内置函数
- Yii编程开发常见调用技巧集锦