递归_算法分析_指导性介绍

版权声明:本文为博主原创作品, 转载请注明出处! https://blog.csdn.net/solider98/article/details/83272234

    递归算法也即自身调用自身的算法, 通常调用自身是为求解规模更小的子问题, 但是每次递归调用编译器都要为之分配独立的内存空间(主要是栈空间). 通常如果能用循环求解, 那么不应使用递归, 因为递归在执行效率方面往往低于循环, 但是递归和循环均为一种强大的程序设计工具, 本人认为, 学算法(包括刷题)的终极目的就是为了强化自己设计和分析算法的能力, 而设计与分析算法至少具备两方面的能力, 第一: 熟练掌握常见算法的具体形式, 第二: 能够从数学角度, 给出严谨的算法正确性证明和时间复杂度分析(有时还需要分析空间复杂度). 对于第二点, 我认为非常重要, 因此在我写的博客中, 如有必要, 我均会对算法的正确性给出形式化证明(尽管有些人认为只需知道如何使用相关算法,而无需分析算法内在原理). 

    对于循环结构的证明, 我推崇且经常使用的做法是使用算法导论一书中提出的循环不变式, 对于递归, 常见的做法是使用数学归纳法, 这是因为递归算法往往也符合数学归纳法中的递推结构, 在本分类下的多数博文中, 我会尽量给出每一个递归算法的形式化证明, 具体采用的证明手段正是数学归纳法.

猜你喜欢

转载自blog.csdn.net/solider98/article/details/83272234