zoukankan      html  css  js  c++  java
  • 如何理解递归

     

    递归是一个非常重要的概念,在计算机中用来表示无穷事物的一个重要手段,递归是一种表达相似性对象及动作的无限性构造的方法。 

     

    再说递归之前我们先要了解迭代。

    迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值,因此迭代是从前往后计算的。

    递归:则是一步一步往前递推,直到递归基础,寻找一条路径, 然后再由前向后计算。

    简单来说:迭代是从前往后计算的,而递归则是先从后往前推,然后再由前往后计算。

     

    举个例子:

    计算n的阶乘。

     

    这里举例计算5!

    迭代:

    第一步: 1!=1

    第二步:2!=2*1!=2

    第三步:3!=3*2!=6

    第四步:4!=4*3!=24

    第五步:5!=5*4!=120

     

    递归:

    第一步:5!=5*4!转而计算4!

    第二步:4!=4*3!转而计算3!

    第三步:3!=3*2!转而计算2!

    第四步:2!=2*1!转而计算1!

    第五步:1!=1  递归出口

    然后再反向计算出结果。

     

    可能大家会好奇,计算机要如何才能实现递归过程呢?

    计算机系统里有系统栈,通过压栈弹栈来完成这一过程,这里就不多说了。

    下面两张图大致反映了这一过程。

    压栈与弹栈(这里计算的是4!)。

    递归代码的执行是按照顺序来的,因为指令的执行就是按照顺序来的,这一点没啥疑问,但是递归代码中返回值的传递却是反过来的,这是通过系统栈这个结构来实现的。 

    总结:递归是一个非常重要的思想,大家一定要好好理解这种思想。

  • 相关阅读:
    Yougth的最大化(好题,二分查找 0 1分数规划)
    Cable master(好题,二分)
    Can you find it?(二分 二分+STL set map)
    Can you solve this equation?(二分)
    Bridging signals(二分 二分+stl dp)
    A Bug's Life
    Is It A Tree?(并查集)
    简单计算器(栈)
    Linux学习之常用压缩命令(三)
    Linux系统之常用文件搜索命令
  • 原文地址:https://www.cnblogs.com/mlgjb/p/8361680.html
Copyright © 2011-2022 走看看