递归算法

什么是递归?

   不断调用自身,每次调用的时候都会改变一个关键变量,直至改关键变量达到设定的额定值时(边界),结束调用

递归的核心思想

  将一个大规模的问题拆分成一个个小的问题,通过解决一个个小的问题逐步来解决大问题;说的通俗一点就是:大事化小,小事化了

类似于数学中的阶层。

递归的组成

  •   递归尽头:什么时候不在调用自身,即为边界;如果递归中没有归头,程序将陷入死循环
  •   递归主体:调用条件,什么时候需要调用自身

问题计算 5 的阶层

      

优缺点

  •    优点:代码简洁、清晰、并且容易验证准确性
  •   缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响。代码看着舒服了,电脑负荷就大了

递归与循环的区别与联系

相同点

  • 都是通过控制一个变量的边界(或者多个),来改变多个变量为了得到所需要的值,而反复而执行的;
  • 都是按照预先设计好的推断实现某一个值求取;(请注意,在这里循环要更注重过程,而递归偏结果一点)

不同点

  递归通常是逆向思维居多,“递”和“归”不一定容易发现(比较难以理解);而循环从开始条件到结束条件,包括中间循环变量,都需要表达出来(比较简洁明了)。

  简单的来说就是:用循环能实现的,递归一般可以实现,但是能用递归实现的,循环不一定能。因为有些题目①只注重循环的结束条件和循环过程,而往往这个结束条件不易表达(也就是说    用循环并不好写);②只注重循环的次数而不注重循环的开始条件和结束条件(这个循环更加无从下手了)。

原文地址:https://www.cnblogs.com/2020YYXZ0507/p/13335804.html