青训营X豆包MarsCode 技术训练营第六课学习体验与故事 | 豆包MarsCode AI刷题

140 阅读2分钟

刷题故事:递归与动态规划的成长历程 在豆包MarsCode的AI刷题工具中,有一道让我印象深刻的算法题,涉及到经典的递归和动态规划问题——斐波那契数列的求解。这道题看似简单,但在不同的解法下,我逐渐深入了解了递归与动态规划之间的差异,也收获了算法思维的成长。

起初,我尝试使用最朴素的递归方法来实现斐波那契数列的求解,代码写起来非常简单。然而,当我输入较大数值时,程序的运行时间却非常长,这让我意识到递归的效率问题。在这个过程中,AI工具的反馈给了我很大帮助。它指出了递归中存在的大量重复计算,比如在求fib(n)时会反复计算fib(n-1)fib(n-2),导致时间复杂度呈指数级增长。

为了优化递归的效率,AI工具引导我学习了记忆化递归的技巧。通过在递归中添加缓存,我大幅减少了重复计算的次数,明显提高了程序的运行速度。这次优化让我对递归的时间复杂度有了更深刻的认识,也逐渐理解了如何通过空间换取时间来提高算法的效率。

接着,AI工具推荐我进一步使用动态规划来解决这个问题。我学会了通过自底向上的方式构建斐波那契数列,即利用一个数组从fib(0)fib(1)开始,逐步推算出更高的值。这种方法不仅避免了递归的栈溢出风险,还将时间复杂度降低到了线性级别。通过这个过程,我彻底理解了动态规划的思想,即将问题拆解为子问题并存储中间结果,从而避免重复计算。

整个刷题的过程让我深刻体会到,算法的优化并不仅仅是代码的改进,更是思维方式的转变。从最初简单的递归实现,到使用记忆化递归,再到动态规划的彻底优化,这一路的学习让我逐步积累了算法优化的经验,也培养了更加严谨的编程思维。

通过这道题目的多次优化,我不仅掌握了斐波那契数列的多种解法,更重要的是学会了如何思考一个问题的不同解法,以及如何在效率和简洁之间找到平衡。这种成长的体验让我更加坚定了继续深入学习算法的信心,也让我看到了AI工具在学习过程中的巨大帮助。