什么是sibling and tail recursive calls
2024-09-08 02:24:18
1 tail call
在函数f中调用函数b,如果这个调用是函数f中执行的最后一条指令,那么这个调用就称为tail call。
例子:
int foo(float a, float b)
{
...
return bar(a/2)
}
不是tail call的例子:
int foo(float a, float b)
{
....
c = bar(a/2)
}
这里最后一条指令是对c进行赋值,而不是调用bar函数。
2 tail recursive call
如果一个tail call中,函数f和函数b是同一个函数,那么这个call就是tail recursive call。
3 proper tail call
在tail call基础上限制条件:
f调用b时,如果函数f的栈可以释放的话,这是一个proper tail call。
4 sibling call
首先这应该时一个proper tail call。
然后还有限制条件:
第一,b的参数所占用的空间不能比f占的空间大。
第二,f和b的返回类型是一样的。
5 汇编指令call和jump
jump指令只是修改了IP,然后直接跳转到该条指令执行,它是不管栈的。
call指令会先将当前的IP入栈,然后修改IP,然后跳转,执行完之后再IP出栈,跳转回来。
最新文章
- [APUE]文件和目录(下)
- apache2.4 绿色版环境配置。
- Questa Functional Verification-autocheck
- Check if KeyValuePair exists with LINQ's FirstOrDefault
- chrome:// 的秘密!!一些有用的命令!
- Google Java 风格 阅读随笔
- 20M宽带的网速等价于多少?
- C语言经典程序190例
- Xcode工程使用CocoaPods管理第三方库新建工程时出现异常
- How to install vim on linux
- yii2.0自带验证码使用
- Spring_Spring与AOP_AspectJ基于注解的AOP实现
- 在Service中抛出异常事务未回滚问题分析与解决
- 201621123031 《Java程序设计》第3周学习总结
- Frame Interpolation
- eclipse中创建DataBase Connections
- python os.path.splitext()
- C++.【转】C++数值类型与string的相互转换
- 树链剖分+线段树+离线(广州网选赛第八题hdu5029)
- SQL中減少日志文件大小