递归解题策略:从NOIP2017习题分析

需积分: 23 0 下载量 196 浏览量 更新于2024-09-08 收藏 197KB DOC 举报
"递归题总结" 在编程竞赛或算法学习中,递归是一种非常重要的问题解决方法,尤其是在处理字符串、树形结构等复杂问题时。递归题常常需要我们理解如何通过递归函数来解决问题,并能有效地进行分析和求解。本资源主要讨论了如何高效地解冑递归题,特别是针对NOIP2017中的递归习题,如lps这类题目。 递归题速解的关键在于理解和应用两种主要策略:绘制递归图和寻找规律。对于简单的递归程序,可以直接通过阅读和理解代码来得出结果。然而,对于更复杂的题目,如lps(Longest Palindromic Subsequence,最长回文子序列),这两种方法就显得尤为重要。 首先,绘制递归图可以帮助我们直观地理解函数调用的过程。通过图形化表示,可以清晰地看到每个递归调用的边界条件和基本情况,有助于找出解题的模式。 其次,寻找规律是另一种有效的方法。对于lps问题,我们可以观察到以下规律: 1. **规律一**:如果字符串的首尾字符相同,且字符串长度为2,那么它的最长回文子序列长度为2。例如,"aa"的lps是"aa",其长度为2。 2. **规律二**:当字符串的首尾字符不同时,且字符串长度为2,其最长回文子序列长度为1。例如,"ab"的lps是"a"或"b",其长度为1。 3. **规律三**:通过对规律一和二的推广,我们可以推断出更一般的情况。在计算lps时,需要比较包含首尾字符的子串与其他不包含首尾字符的子串的lps,以及考虑首尾字符是否相等的情况。 在编写递归函数时,需要特别注意边界条件的处理,例如,当索引i大于j时,表示没有子串,因此lps的长度为0。此外,当i等于j时,表示只有一个字符,其lps长度为1。 递归解题的关键在于理解和利用递归的基本性质,即每次递归调用都向基本情况逼近。对于lps问题,基本情况是单个字符或空字符串,它们的lps长度可以直接确定。通过这些基础情况,我们可以逐步构建起对复杂情况的解决方案。 解决递归题不仅需要扎实的编程基础,还需要对递归原理有深入的理解和灵活的应用。通过练习和分析,我们可以逐步掌握递归问题的解决技巧,提高解题效率。对于类似NOIP2017中的lps问题,熟练掌握规律寻找和递归图绘制方法将大有裨益。