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!)。

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

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

  • 相关阅读:
    JQuery Easy UI 1.7官网最新版附1.7API
    JS时间戳转换日期格式,附JS脚本详细用法
    JS原生对象实现异步请求以及JQ的ajax请求四种方式
    WebService跨域配置、Ajax跨域请求、附开发过程源码
    反射DataTable转实体类
    前端分页、及分页原理
    源码剖析之sun.misc.Unsafe
    JAVA并发编程学习笔记之CLH队列锁
    java 中的Unsafe
    AbstractQueuedSynchronizer源码解析之ReentrantLock(二)
  • 原文地址:https://www.cnblogs.com/mlgjb/p/8361680.html
Copyright © 2011-2022 走看看