尾递归一个实验
2015-10-25 11:58
190 查看
我刚在.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
…………
以上是递归的栈结构,尾递归具有这样一个事实:
就是每一次递归时,其之前的调用已经计算完毕,无需存储中间结果,所以本次调用完全可以使用前一次调用的栈,所以栈结构并不会向下延伸
相关文章推荐
- strspn函数 strcspn函数
- UML——包图
- APK文件传到网站上出现不能被下载问题解决办法
- mysql sharding (二)
- jQuery DOM操作 方法汇总
- jQuery 选择器/筛选
- javascript类的创建方法详解
- 有继承时的构造方法(转)
- 学习ECMAScript5规范中Object新增的API
- ubuntu 安装maven
- JS 获取滚动条位置
- python爬虫-第一步,获取页面
- Android平台免Root无侵入AOP框架Dexposed使用详解
- 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果
- 软件工程之项目管理
- 字符输入和输出(代码片段)
- mysql sharding
- 字符串加密
- Go指南中的练习:map
- 张先生和王某夫妇的债务纠纷