【转载】论递归算法的数学原理
原文链接: https://www.acwing.com/file_system/file/content/whole/index/content/6489818/
想必很多同学在接触递归算法的时候都会很困惑,比如归并排序,为什么下面的代码可以将一个序列排好序呢?
今天突然发现,递归过程的本质就是数学归纳法!我们再刨根问底一下,数学归纳法的正确性又源自于什么呢?答案就是:数学归纳法是一个公理,只有满足数学归纳法的数集才是我们平时用到的自然数集!
所以,递归过程的正确性是个公理!这也是为什么我们对递归很困惑的原因了。
接下来以归并排序为例,我们用数学归纳法来证明其正确性。
首先当序列长度小于等于1的时候,序列有序,成立。
假设对于任意序列长度小于的序列, merge_sort(l, r) 都能将序列排好序。
那么我们证明对于任意序列长度等于的序列, merge_sort(l, r) 也可以将序列排好序。
我们再来看 merge_sort 这个函数:
图中红色框起来的部分,根据归纳假设, [l, mid] 和 [mid + 1, r] 的长度都小于,所以 merge_sort 函数可以将其排好序。
然后左右两个有序序列,通过二路归并算法,就可以合并成一个有序序列了,因此对于当前长度为的区间, merge_sort 也可以将其排好序。证毕。
所以对于任意自然数长度的区间, merge_sort() 都可以将其排好序。
本文来自博客园,作者:onlyblues,转载请注明原文链接:https://www.cnblogs.com/onlyblues/p/16673326.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效