递归算法介绍

概念:

       在程序设计中,如果一个程序调用自身,称作递归调作。

       以C或C++为例,在函数的语句体中,直接或间接调用自身,就是递归。

      递归算法,通常是把一个大型复杂的问题,一次次通过递归调用而层层转化为一个与原问题相似的规模较小的问题来求解,基本思想是将大问题一步步化为小问题,递归算法只需少量的程序就可表达对大问题的计算过程所需要的多次重复计算,大大地减少了程序代码。

      因此,用递归思想写出的程序往往十分简单,容易阅读明白。

使用注意问题:
      对于递归来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 也就是要注意防止程序死循环。

    因此程序必须有一个明确的递归结束条件,称为递归出口,否则将无限进行下去。

递归算法解决的问题:

  递归算法一般用来解决三类问题,
  A数据是按递归定义的。

     例如,Fibonacci函数,阶乘。请大家分析课本例题,描述程序递归过程。

  B回溯问题

      有时也叫试探法,是一种搜索性问题的解的方法。基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。
  C按递归定结构数据。

      例如图的遍历。

递归的缺点:
      递归算法解题的运行效率是比较低的。在递归调用的过程中,系统要为每一层的返回点、局部量等开辟了存储栈,当次数过多容易空间消耗或造成溢出。

古典题目试做:

   汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求打印移动的步骤。

     如图所示:

      《递归算法介绍》

    原文作者:递归算法
    原文地址: https://blog.csdn.net/yixueming/article/details/24394549
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞