算法——从斐波那契数列谈起(一)
问题的开始
现在有一个数列
满足
通俗来讲,这个数列就是当前项等于之前两项之和。
求
递归
递归是函数自己调用自己的过程,是一种通过重复将问题分解为同类的子问题而解决问题的方法,和分治类似。
递归的递归定义:
递归就是一种通过递归来解决问题的方法。
这时你如果要理解递归,就必须了解定义中加粗的递归的定义,于是你去看递归的定义,为了理解递归的定义,就必须了解定义中加粗的递归的定义
于是你渐渐悟出,递归就是自己解释自己,自己使用自己的意思。
事实上,递归在数学中也十分常见:
集合论对自然数的正式定义是:
是一个自然数,每个自然数都有一个后继,这一个后继也是自然数。
有限递归与无限递归
无限递归的例子:
从前有座山,山里有座庙。
庙里有个老和尚在给小和尚讲故事。
故事讲的是:
从前有座山,山里有座庙。
庙里有个老和尚在给小和尚讲故事。
故事讲的是:
没有终止,无穷无尽。
有限递归的例子:
你今年几岁?答:去年的岁数加一岁,2000 年我出生。
这次是有穷尽的递归,到2000年停止递归(2000年时1岁)。
这里2000年停止并返回1岁是递归的终止条件。
代码的例子
int func(传入数值) {
if (终止条件) return 最小子问题解;
return func(缩小规模);
}
回到问题
说了这么多,在回来看一看我们斐波那契数列的问题:
这个数列就是当前项等于之前两项之和。
现在这个问题很明显是递归了,求第
代码
int fabbic(int x) {
if (x == 0 || x == 1)
return 1; // 终止条件
return fabbic(x - 1) + fabbic(x - 2); // 递归调用
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~