zoukankan      html  css  js  c++  java
  • 尾递归一个实验

    我刚在.Net下做了测试,对于尾递归,在Debug模式下,不会被优化为非递归结构,在Release模式下,会被优化为非递归结构,就不存在栈溢出的问题了

    STST 

    这是我模拟的文件结构类

    STST

     

    这是非尾递归版本

    STST

    这是尾递归版本

    STST

    这是测试代码

    STST

    这是CreateDir的定义

    STST

    结果:

    1,在Debug模式下,无论是不适尾递归,都会溢出

    2,在Release模式下,非尾递归版本会溢出,而尾递归版本不会溢出

    STST

    现代编译器我认为都会有的

    STST

    因为尾递归优化为非递归版本已经是很古老的技术了

    STST

    你可以在Java下测试下,我没有Java的环境

    STST

    只需要把你的方法参数改为File数组类型,就可以把递归变成真正的尾递归了

    STST


    这个没有依据的

    0XB000:Do_尾递归(Files)

    ……

    ……

    栈:

    0XA000:->参数:Files

    0XA004:->返回地址:0XA000

    0XA008:  ->参数:Files

    0XA012:  ->返回地址:0XA004

    0XA016:    ->参数:Files

    0XA020:    ->返回地址:0XA012

    …………

    以上是递归的栈结构,尾递归具有这样一个事实:

    就是每一次递归时,其之前的调用已经计算完毕,无需存储中间结果,所以本次调用完全可以使用前一次调用的栈,所以栈结构并不会向下延伸

  • 相关阅读:
    CF687D Dividing Kingdom II
    图论——EK算法
    P6082 [JSOI2015]salesman
    联合权值——树上问题2014noip
    P2071 座位安排——二分图最大匹配
    匈牙利优化时间戳的正确性
    P1541 乌龟棋——线性动规
    P1858 多人背包
    P3558 [POI2013]BAJ-Bytecomputer——线性动归
    P2303 [SDOI2012] Longge 的问题
  • 原文地址:https://www.cnblogs.com/stst/p/4908516.html
Copyright © 2011-2022 走看看