码迷,mamicode.com
首页 > 其他好文 > 详细

尾递归一个实验

时间:2015-10-25 13:29:04      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

技术分享我刚在.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

…………

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

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

尾递归一个实验

标签:

原文地址:http://www.cnblogs.com/stst/p/4908516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!