首页 > 其他 > 详细

什么是sibling and tail recursive calls

时间:2017-10-16 13:15:51      阅读:240      评论:0      收藏:0      [点我收藏+]

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出栈,跳转回来。

 

什么是sibling and tail recursive calls

原文:http://www.cnblogs.com/hustdc/p/7676181.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!