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. IN、EXISTS的相关子查询用INNER JOIN 代替--性能优化

    如果保证子查询没有重复 ,IN.EXISTS的相关子查询可以用INNER JOIN 代替.比如: IN.EXISTS的相关子查询用INNER JOIN 代替--sql2000性能优化

  2. HDU_1398_母函数

    Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  3. vue路由中的 Meta

    在项目中肯定有这样的需求,那就是在某个页面的时候,顶部展示 现在当前的页面路径,如下图: 这个在vue中其实很好实现. 首先出现这个肯定是相对应不同的页面,也就是说对应不同的路由,我们在定义路由的时候 ...

  4. PAT_A1015#Reversible Primes

    Source: PAT A1015 Reversible Primes (20 分) Description: A reversible prime in any number system is a ...

  5. ZooKeeper 运维经验

    转自:http://www.juvenxu.com/2015/03/20/experiences-on-zookeeper-ops/ ZooKeeper 运维经验 ZooKeeper 是分布式环境下非 ...

  6. 数据类型---->Number

    Javascript中有六种数据类型 1.undefined:这个值未定义 2.boolean:这个值是布尔值 3.number:这个值是数值 4.function:这个值是函数 5.object:这 ...

  7. JS常见的四种设计模式

    1 工厂模式 简单的工厂模式可以理解为解决多个相似的问题; function CreatePerson(name,age,sex) { var obj = new Object(); obj.name ...

  8. 51nod1079 中国剩余定理【数论】

    一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K.例如,K % 2 = 1, K % 3 = 2, K % 5 = 3.符合条件的最小的K = 23. Input 第1行:1个数N表 ...

  9. Java常量池详细说明

    java常量池技术  java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间.常量池 ...

  10. 将RedHat的yum更换为CentOS的yum

    CentOS6.8 脚本: #安装yum所需的包已经下载到本地 #!/bin/bashrpm -qa | grep yum | xargs rpm -e --nodepsrm -rf /etc/yum ...