免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: Magicloud
打印 上一主题 下一主题

非尾递归的递归生成的数组参与运算会是lazy的吗? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
21 [报告]
发表于 2009-04-13 14:02 |只看该作者
原帖由 MMMIX 于 2009-4-13 13:56 发表

表述不准确,没有“一些”。另外,如果你对这个存疑,可以试着构造一些不能变形为尾递归或者循环的递归的例子。

BTW,递归向循环的转换貌似是有数学证明的,可以翻翻计算理论方面的资料。

据说汉诺塔就是?

论坛徽章:
0
22 [报告]
发表于 2009-04-13 15:11 |只看该作者
原帖由 MMMIX 于 2009-4-13 13:56 发表

表述不准确,没有“一些”。另外,如果你对这个存疑,可以试着构造一些不能变形为尾递归或者循环的递归的例子。

BTW,递归向循环的转换貌似是有数学证明的,可以翻翻计算理论方面的资料。

转换能为循环,运算也未必是lazy的,仍是前边说过的,如果编译器“认为”第一个元素依赖于其后的元素,那么取第一个就不是“理想”的lazy。
foldr不是尾递归的,但如何能测试出其运算过程是否lazy呢?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
23 [报告]
发表于 2009-04-13 17:03 |只看该作者
原帖由 flw 于 2009-4-13 14:02 发表

据说汉诺塔就是?

证明呢?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
24 [报告]
发表于 2009-04-13 17:05 |只看该作者
原帖由 Magicloud 于 2009-4-13 15:11 发表

转换能为循环,运算也未必是lazy的,仍是前边说过的,如果编译器“认为”第一个元素依赖于其后的元素,

你的意思是有些情况编译器无法优化?给出具体的例子,及它在理论上无法优化的原因。

论坛徽章:
0
25 [报告]
发表于 2009-04-13 17:50 |只看该作者
尾递归所需的空间是 O(1) 的,一般的递归不满足这个条件,比如 QuickSort.

梵塔的递归模式为  T(0)=0, T(n)=2T(n-1)+1

这个模式不是尾递归的,可以变形成尾递归或直接用迭代,但我觉得这个对编译器要求太高。

[ 本帖最后由 win_hate 于 2009-4-13 18:06 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2009-04-14 10:39 |只看该作者
原帖由 MMMIX 于 2009-4-13 17:05 发表

你的意思是有些情况编译器无法优化?给出具体的例子,及它在理论上无法优化的原因。

我就是想知道“理论证明,全部可以优化”,这样写代码就可以考虑更多的业务意义、易读性,而不是因为不能lazy而性能底下。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
27 [报告]
发表于 2009-04-14 11:24 |只看该作者
原帖由 Magicloud 于 2009-4-14 10:39 发表

我就是想知道“理论证明,全部可以优化”,这样写代码就可以考虑更多的业务意义、易读性,而不是因为不能lazy而性能底下。

你这个就属于过早优化了。写代码的时候你本来就应该更多考虑业务意义,写完以后,才是 profiling, 找出性能瓶颈以后才是优化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP