【SICP练习】90 练习2.63

本文通过对比两种不同的实现方式,探讨了递归与迭代在处理树形结构数据时的效率差异。通过对具体例子的分析,揭示了递归与迭代各自的优缺点,特别是针对append和cons操作的不同时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习2.63

这两段代码的区别在于第二段用了迭代,相信可以大大减少计算时间。那么还是先来测试第一小题。需要的代码大家先敲进去。然后来定义图2-16中的三棵树了。

(define tree-1 (make-tree 7
              (make-tree 3 
                     (make-tree 1 '() '())
                     (make-tree 5 '() '()))
              (make-tree 9
                     (make-tree '())
                     (make-tree 11 '() '()))))
(define tree-2 (make-tree 3
              (make-tree 1 '() '())
              (make-tree 7
                     (make-tree 5 '() '())
                     (make-tree 9 
                        '()
                        (make-tree 11 '() '())))))
(define tree-3 (make-tree 5 
              (make-tree 3
                     (make-tree 1 '() '())
                     '())
              (make-tree 9 
                     (make-tree 7 '() '())
                     (make-tree 11 '() '()))))

这些相信大家都会定义的,make-tree的三个参数依次是结点,左右树枝。
对这三棵树,2段代码做6次测试,得到的结果毫无疑问的一致:
(1 3 5 7 9 11)

那么a小题就算完成了,至于b小题涉及到了这两个函数的执行效率,因此我们不得不对它们进行分解展开。

这里写图片描述

这里写图片描述

我们就用第一棵树,分别用两个函数来演示展开过程。
展开的过程真是太漫长了,但收获也是有的,我们发现其到最后一共有6次append,同时也有6次cons,而tree-1的节点一共有6个(当然了,tree-2和tree-3也是6个结点)。因此结论是使用append和cons的次数和结点的个数是正相关的。而append的复杂度比cons高,前者为n后者为1,因此这个函数的复杂度为n方。

tree->list-2的展开过程类似,其复杂度为n。因此虽然两者最终结果一样,但第二个函数更快速。



感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:
http://blog.youkuaiyun.com/nomasp


版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

转载于:https://www.cnblogs.com/NoMasp/p/4786129.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值