写在前面:
对于强大的递归。要想做到灵活运用,是需要花时间进行练习并总结。往往递归学习的入门也是难度也比较大,常常会处于看得明,却写不出的"尴尬"情况。
本人也是一名编程菜鸟,也常处于尴尬中。正因递归的学习需要一个过程,所以萌生一个想法,对于每一次的递归学习都写篇博文总结,与大家分享,共同进步!
在此推荐一本学习递归较好的的入门书:《程序设计抽象思想:C语言描述》 。本文章也引用了书中的对递归要点的理解和描述。
*文章练习会不定期进行更新
递归的简单介绍和要点梳理
递归的定义:
将一个大的问题分解成比较小的、有着相同形式的问题。
递归是一种强有力的思想。在计算机科学的学习中,一个重要的必须学习的概念是递归。递归是一种编程策略,它把一个大的问题分解成具有相同形式的简单问题。
递归示例:(可以按照以下顺序逐步练习递归)
1.阶乘函数
2.斐波那契函数
3.回文字符串
4.字符串翻转
5.折半查找
6.汉诺塔
7.poj放苹果
使用递归的必需条件
一般对递归思想的介绍,都是说将大问题分解为一个个小问题。本人觉得,带着 “如何将问题规模缩少”的思想 比 “将大问题分解为一个个小问题” 的思想要更好地编写递归程序。
递归跳跃的信任
当尝试理解递归程序时,必须能够抛开底层的细节,将注意力集中在单个计算层次上。在这个层次上,只要一个递归调用的参数在某些方面能比前一个参数更简单,那么就可以认为任何递归调用都能够自动地得到正确的答案。这种心理策略——假设任何更简单的递归都能正确地实现——叫做对递归跳跃的信任。在实际应用中,学习应用这个策略是使用递归的基础。
以递归的方式思考
保持整体观:递归思维要求整体考虑。在递归领域中,只考虑局部是理解的敌人,将会妨碍对递归的理解。为了保持这种整体观,必须习惯于采用对递归跳跃的信任。无论是在写递归程序或是理解递归程序,都必须达到忽视单个递归调用细节的地步。只要选择了正确的分解,确认了相应的简单情景,并且正确地实现了策略,那么这些递归调用能够自己运行,不必过多考虑。
避免常见的错误
原文:http://www.cnblogs.com/fengyiyangdeakaliusi/p/4657146.html