递归存在的问题:
由于时间或空间的限制,并不是所有的问题都可以用递归进行解决,其本身可能会带来一些不希望看到的副作用,如堆栈溢出。
递归使用建议:
(1)当有疑问时,写下重复出现的关系。通常可以使用数学公式进行推导,通过数学公式可以澄清思想,揭示隐藏的重复出现的关系。
(2)只要有可能,就应用记忆化。有时,在递归过程中会出现重复计算的情况,这种情况下,可以尝试应用记忆化技术,其可以在空间复杂性上稍微这种,从而极大地提高时间复杂性,避免代价较高的重复计算。
(3)当堆栈溢出时,尾递归可能会有所帮助。尾递归可以通过消除递归带来的堆栈开销,优化了算法的空间复杂度,以及避免伴随一般递归带来的堆栈溢出问题,并且尾递归更易于阅读和理解。