zoukankan      html  css  js  c++  java
  • 什么是sibling and tail recursive calls

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

  • 相关阅读:
    嵌入式软件设计第8次实验报告
    嵌入式软件设计第7次实验报告
    140201129-贾杰峰
    java.第二次作业
    java.第一次作业
    故宫博物院参观
    中国国家博物馆参观
    北京鼓楼
    6.1下午数学
    6.1下午
  • 原文地址:https://www.cnblogs.com/hustdc/p/7676181.html
Copyright © 2011-2022 走看看