查看: 2379| 回复: 3
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 刷题感悟一: 一切都是递归

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
divide and conquer不用说了,肯定是递归呀

dfs,用stack肯定是递归对吧

dynamic programming,从子问题中解决原问题,只不过加了一个cache/memo来记录子问题,用空间换时间

backtracking,也是递归对吧, 只是子问题之前没有overlap所以时间复杂度比dp高很多

binary search其实也可以算递归,每次通过一个local的condition(砍掉左边还是右边)来决定如何把原问题的size降低一半, 然后不断重复

问啥递归这么强大呢?这个lz是外行只能引用一下wiki

It follows that it is difficult to devise a computable function that is not primitive recursive

https://en.wikipedia.org/wiki/Primitive_recursive_function#:~:text=In%20computability%20theory%2C%20a%20primitive,determined%20before%20entering%20the%20loop).

所以从计算理论上来说recursion是相当强大的,所以各种方法看成是递归的变种也不奇怪。

只不过这个perspective虽然general,但是还缺少很多细节。实际做题的时候只用递归可能会太慢。这时候就想办法转成iteration的方法来加速。有很多细节和奇技淫巧lz下次再总结吧

大家觉得有用给点大米呗~~

上一篇:你们都怎么学习递归
下一篇:brain teaser求讨论!金工买方OA
推荐
duao119 2020-10-29 10:15:20 | 只看该作者
全局:
楼主有没有听说过
"All iterative functions can be converted to recursion; All recursive functions can be converted to iteration"
所以要说一切都是循环也可以
回复

使用道具 举报

推荐
lifesuckad 2020-10-29 10:25:11 | 只看该作者
全局:
本帖最后由 lifesuckad 于 2020-10-29 10:27 编辑






那你还不如说一切问题都是数学。computer science is a small part of math.  
递归也不过是一个数学公式而已。
所有算法都可以抽象成数学, 然后证明。你都不用写代码。



回复

使用道具 举报

全局:
有一定道理。刷题网里相关的题多因为分治法通常能带来从n^2 到nlogn的性能提高。应用比较广泛。再往下优化规律性就不是很强了,需要case by case。我印象里要求O(n)的题递归的少。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表