递归思想与KMP算法
很有幸读到了很实用优秀的一篇关于kmp算法的解释博客通俗易懂的字符串匹配KMP算法及求next值算法,在写博客前推荐给大家。
接下来是我自己对递归相关知识的理解和总结
迭代和递归
迭代是适合对数据掌握很多的,知道有几层。递归是适合掌握很少信息的。现实问题中能用迭代就不要用递归,因为效率很低。迭代时循环结构,而递归是选择结构。
斐波那契数列的递归实现
以兔子的繁衍为例:
递归定义:一个直接调用自己或者间接调用自己的函数,叫做递归函数。每一个递归必须至少有一个条件,当满足这个条件时,递归结束,不然就会陷入永无止尽的循环递归。
递归可以使程序结构更清晰,减少读懂程序的时间。但是大量的递归会建立很多副本,很消耗内存和时间
递归有调用和回退两个阶段,回退是调用的逆序。递归是一个过程,每一次调用过程都是一样的。如:算n!
分治思想:把问题分解成一个个小模块,每个模块都是类似的问题,然后一个个解决每个模块的问题。
实际应用
汉诺塔 借助中间的柱子实现