c语言递归讲解分析
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语言递归讲解分析的更多相关文章
- TINY语言采用递归下降分析法编写语法分析程序
目录 自顶向下分析方法 TINY文法 消左提左.构造first follow 基本思想 python构造源码 运行结果 参考来源:聊聊编译原理(二) - 语法分析 自顶向下分析方法 自顶向下分析方法: ...
- 编译原理-递归下降分析法 c程序部分的分析
实验三 语法分析程序实验 专业 商软2班 姓名 黄仲浩 学号 201506110166 一. 实验目的 编制一个部分文法分析程序. 二. 实验内容和要求 输入:源程序字符串 输出:正确 ...
- 利用R语言打造量化分析平台
利用R语言打造量化分析平台 具体利用quantmod包实现对股票的量化分析 1.#1.API读取在线行情2.#加载quantmod包3.if(!require(quantmod)){4. instal ...
- R语言重要数据集分析研究——需要整理分析阐明理念
1.R语言重要数据集分析研究需要整理分析阐明理念? 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候如何下手分析,数据分析的第一步,探索性数据分析. 统计量,即统计学里面关注的数据集的几个指标 ...
- 编译原理 #02# 简易递归下降分析程序(js实现)
// 实验存档 截图: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- 第二十四节:Java语言基础-讲解数组的综合应用
数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...
- Go语言的前景分析
本文为原创文章,转载注明出处,asdfasdfasdf 欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章.觉得好的话,顺手分享到朋 ...
- 第十一次作业 LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- Go将统治下一个10年?Go语言发展现状分析
“本文是国内Go语言大中华区首席布道师——许式伟,在QCon2015上海站上的分享.他预测Go语言10年内一定会超过C和java,并且统治这一个10年. Go语言语法及标准库变化 Go从1.0版本到现 ...
随机推荐
- php数据库分页
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- dapper.net 存储过程
var param = new DynamicParameters(); param.Add(); param.Add(); param.Add(, DbType.Int32, ParameterDi ...
- Apache2.2 启动和停止命令
1.启动:net start apache2.2 2.停止:net stop apache2.2
- day37-3 异常处理
目录 异常处理 捕捉异常 raise assert 异常处理 捕捉异常 语法错误无法通过try检测,就像函数一样 try: 1/0 except Exception as e: # Exception ...
- sqlserver 和MySQL的一些函数的区别
相同的表数据在sqlserver和MySQL中使用各自的函数得到相同的结果,如下表 drop table tb;create table tb(id int, value1 varchar(10), ...
- eas左树右表基础资料界面引用为左树右表F7的简单方法
age: /** * 加载配件F7(左树右表) * @param F7Filed 要加载的F7控件 * @param ctx 界面上下文 * @单据 ...
- SpringBoot 整合 Mybatis 进行CRUD测试开发
今天来和大家分享下 Spring Boot 整合 MyBatis 的 CRUD 测试方法开发.因为 MyBaits 有两种开发形式,一种基于注解,一种基于 xml . SpringBoot配置文件也有 ...
- greenplum资源队列
1.创建资源队列语法 Command: CREATE RESOURCE QUEUEDescription: create a new resource queue for workload m ...
- base64模块 简单了解
base64,字符串文本编码解码,方便数据进行传输 import base64 '''编码解码''' st = 'ni hao'.encode('utf8') result = base64.b64e ...
- 百度之星2014复赛 - 1002 - The Query on the Tree
先上题目: The Query on the Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...