递归与分治
很小的时候,我就很好奇,我大天朝13亿人,人口普查怎么查出来的。
然后我脑补了一下,一个苦行僧手里拿着一本册子从南走到北,从白走到黑,碰到一个人就画正字。然后用双脚丈量一波全国的土地,统计出我国人口。
这刚刚好也能解释,为啥人口普查那么久才进行一次了。因为统计员统计一次要很多年。
当然,这也只是一个笑话罢了,计算机的能力很强大的。
所谓递归,就是程序自己调用自己去解决自己的子问题。某些问题在大局面上无法直接解决,但是可以将其划分成一个一个子问题,不断划分下去就可以从局面极小的子问题直接得到答案,然后再反过来一路拼上来。这种思想,就叫分治,分而治之。计算机实现分治的最好办法,就是递归。
比如人口普查,设CalcPeopleCnt(area)来计算某地区的人口数。显然,直接得到CalcPeopleCnt(China)并不现实。所以我们就要各省级单位进行本省统计,就是CalcPeopleCnt(Hunan)+......之类的。再细分到市,县,区等等。统计一个小区或者村庄有多少人可以交给居委会直接“暴力”求得答案,再一级一级反馈上去合成大范围的答案,那么最后整个中国有多少人就可以很快得出来了。
这种“大事化小,小事化了”的思想,在OI中有很大的运用,关于很多东西都会用到这种思想,所以分治,极为重要。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步