zoukankan      html  css  js  c++  java
  • 关于递归函数的简单认识

      关于递归函数的认识是在学习了数据结构的栈这一概念后有新的理解。

      首先说一下递归函数的概念,我的理解就是一个自己调用自己本身的函数。既然是调用函数,那先看一下普通的函数调用问题。

    一、普通函数调用问题

    用主函数main()调用函数sum()函数来作比:

    void main(){

    //其他语句1

    sum();

    //其他语句2

    }

      整个程序运行的入口是main(),当main()函数运行完“其他语句1”遇到sum();语句时,main做的工作就是:

    1.保存现场(保存现场这一操作就用到了前面提到的栈)

    2.传递参数

      当sum()函数运行结束返回main时,被压栈的“现场”出栈,继续运行“其他语句2”。接下来说递归函数调用问题。

    二、递归函数调用问题

      递归函数调用和普通的函数调用的区别就在调用了自己本身,使得理解上有一点困难,用一个例子:

    void fun(int n){

    if (n=1)

    //语句1;

    else

    fun(n-1);

    //其他语句2;

    }

      函数执行的过程是,前n-1步都执行的else语句,直到参数值为n-1=1时,“递”的过程才结束,此时才是“其他语句2”的第一次执行,然后才返回参数值为n-1=2这一层函数,

    之后是第二次“其他语句2”的执行,以此类推到参数为n这一层函数,这是“归”的过程。

      在“递”的过程中与栈相关的操作是入栈,就是将每一层函数的“现场”压栈;“归”的过程中与栈相关的操作是出栈,就是返回上一层函数时将“现场”出栈。

      总结来说,递归函数就是利用“栈”这种数据结构,从“原点”“递”到最深层,再“归”到“原点”。

  • 相关阅读:
    网上找的面试题-之一
    python里的Join函数
    【转载51CTO】Linux中引号那些事儿
    【面试编程题】巧妙排序:排序只有1,2,3三个元素的数组,不能统计1,2,3的个数。
    [转载]mininet的安装和使用
    Open vSwitch源码阅读【转】及自己的理解【稍后更新】
    7、8月份安排 进度条
    请不要忽视基础小细节
    【编程之美】2.20 程序理解问题
    GDOI2017爆炸记
  • 原文地址:https://www.cnblogs.com/jiangcsu/p/5376429.html
Copyright © 2011-2022 走看看