C语言允许函数调用它自己,这种调用的过程称为“递归(recursion)”

举例说明,如下代码:

#include <stdio.h>
void up_and_down(int);
int main(void)
{
up_and_down();
return ;
}
void up_and_down(int n)
{
printf("Level %d: n location %p\n",n,&n);
if (n < )
up_and_down(n+);
printf("LEVEL %d: n location %p\n",n,&n);
}

定义一个函数up_and_down(int n),且函数当中再次调用本身。下面是程序运行效果:

[root@MiWiFi-R4-srv C]# cc recur.c

[root@MiWiFi-R4-srv C]# ./a.out
Level 1: n location 0x7ffdbc113dac
Level 2: n location 0x7ffdbc113d8c
Level 3: n location 0x7ffdbc113d6c
LEVEL 3: n location 0x7ffdbc113d6c
LEVEL 2: n location 0x7ffdbc113d8c
LEVEL 1: n location 0x7ffdbc113dac

代码分析;函数up_and_down(int n)中在包含if语句,符合条件变再次调用自身,那么可将up_and_down(int n)分解写成如下形式:

void up_and_down(int n)                                           //根据主函数赋值,n=1;
{
printf("Level %d: n location %p\n",n,&n);
//输出显示:Level 1 :n .............
if (n < ) //判定n=1,且小于3;则进入if语句。
{
n = n + ; //在if语句中,n被重新赋值,且值为2。
printf("Level %d: n location %p\n",n,&n);
//输出显示:Level 2 :n .............
if (n < ) //再次遇到if语句,n等于2,条件语句为真,则执行if语句。
{
n = n + ; //n被重新赋值,且值为3。
printf("Level %d: n location %p\n",n,&n);
//输出显示:Level 3 :n ...........
if(n < ) //执行判定语句,条件语句为假,则跳过if语句。
up_and_down(n+1);
printf("LEVEL %d: n location %p\n",n,&n); //执行语句,输出显示:LEVEL 3 :n .........
}
printf("LEVEL %d: n location %p\n",n,&n); //执行语句,输出显示:LEVEL 2 :n ............
}
printf("LEVEL %d: n location %p\n",n,&n); //执行语句,输出显示:LEVEL 1 :n ........
}

分析代码行为如下。

1;n 接收到主函数值为1,运行printf()函数,之后判定if语句,条件为真则继续调用本身,执行printf()函数,判定if语句。直到if条件为假,停止调用本身。

2;当 n 的值为3 时。if条件语句为假,则跳过if语句,执行printf("LEVEL %d: n location %p\n", n , &n);(注意:此时n的值为3).

3;当递归函数(n值为3时)执行结束,则将控制权返回给上一级递归(n的值为2)的时候,继续完成递归函数。重复行为,直到返回到主函数,即n的值为1的时候。

c语言递归讲解分析的更多相关文章

  1. TINY语言采用递归下降分析法编写语法分析程序

    目录 自顶向下分析方法 TINY文法 消左提左.构造first follow 基本思想 python构造源码 运行结果 参考来源:聊聊编译原理(二) - 语法分析 自顶向下分析方法 自顶向下分析方法: ...

  2. 编译原理-递归下降分析法 c程序部分的分析

    实验三 语法分析程序实验 专业 商软2班   姓名 黄仲浩  学号 201506110166 一. 实验目的      编制一个部分文法分析程序. 二. 实验内容和要求 输入:源程序字符串 输出:正确 ...

  3. 利用R语言打造量化分析平台

    利用R语言打造量化分析平台 具体利用quantmod包实现对股票的量化分析 1.#1.API读取在线行情2.#加载quantmod包3.if(!require(quantmod)){4. instal ...

  4. R语言重要数据集分析研究——需要整理分析阐明理念

    1.R语言重要数据集分析研究需要整理分析阐明理念? 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候如何下手分析,数据分析的第一步,探索性数据分析. 统计量,即统计学里面关注的数据集的几个指标 ...

  5. 编译原理 #02# 简易递归下降分析程序(js实现)

    // 实验存档 截图: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  6. 第二十四节:Java语言基础-讲解数组的综合应用

    数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...

  7. Go语言的前景分析

    本文为原创文章,转载注明出处,asdfasdfasdf 欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章.觉得好的话,顺手分享到朋 ...

  8. 第十一次作业 LL(1)文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  9. Go将统治下一个10年?Go语言发展现状分析

    “本文是国内Go语言大中华区首席布道师——许式伟,在QCon2015上海站上的分享.他预测Go语言10年内一定会超过C和java,并且统治这一个10年. Go语言语法及标准库变化 Go从1.0版本到现 ...

随机推荐

  1. 《深入理解Android虚拟机内存管理》示例程序编译阶段生成的各种语法树完整版

    1.tokens "int"                   "int" <SPACES>                " &quo ...

  2. Ceph 文件系统的安装

    yum install -y wget wget https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#md5=01026f87 ...

  3. (转)Bootstrap 之 Metronic 模板的学习之路 - (1)总览

    https://segmentfault.com/a/1190000006673582#articleHeader0 写在前面 bootstrap 的模板非常多,Envato 上有着各种各样的免费及付 ...

  4. javaee IO流作业02

    package Zy; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fil ...

  5. BZOJ 4327: JSOI2012 玄武密码 后缀自动机

    Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...

  6. 复习MySQL③导入数据、检查及修改

    导入数据: 用insert into语句为表插入数据: - insert into 表名(字段1,字段2,…) values …… 导入外部文本文件: - 导入外部txt文件(导入CSV文件分隔符为' ...

  7. freemarker使用map替换字符串中的值

    package demo01; import java.io.IOException;import java.io.OutputStreamWriter;import java.io.StringRe ...

  8. swift-UITableView的基本使用

    废话不多说了,直接贴我今天写的代码吧:如果新手有什么不懂的,可以发我邮箱. // //  singleInfo.swift            个人信息 //  Housekeeper // //  ...

  9. sass使用中出现的问题

    问题一:ruby按照官方文档安装后更换gem源时,报错Error fetching https://gems.ruby-china.org/: bad response Not Found 404 ( ...

  10. Win32_Window(day02)

    --- 窗口创建函数 ---#include <Windows.h> //窗口处理函数 HINSTANCE g_hIns; LRESULT CALLBACK WndProc(HWND hW ...