网站大量收购闲置独家精品文档,联系QQ:2885784924

C语言第七章 递归.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言第七章 递归

主讲教师:*** 个人主页:*** 教材:《C语言程序设计(C99版)》 陈良银 游洪跃 李旭伟 主编 李志蜀 唐宁九 李 涛 主审 清华大学出版社 2006年9月出版 本书内容 第1章 基础知识 第2章 C语言的基本要素 第3章 变量名、数据类型、运算符和表达式 第4章 C程序基本控制结构 第5章 函数 第6章 数组和指针 第7章 递归 第8章 结构、联合、位运算和枚举类型 第9章 预处理命令 第10章 文件 第11章 高级话题 第12章 C89 Vs C99 实验 (待安排) 本章的节本要求 本章主要介绍C语言的递归方法,通过本章的学习使读者了解各种常见的递归方法,通编写基本的递归程序。 本章将主要介绍两种递归方法:回溯法和分而治之方法。 在网页:/~youhongyao可获得源代码等相关资源。 7.1 递归问题求解 递归是函数直接或间接对自已进行调用,在C语言中,所有函数都可以使用递归,数学上的迭代函数都可以用递归进行编程。 例7.1 用递归求阶乘n!S7_1.C。 阶乘可用迭代表示如下: /* 用递归求阶乘n! */ int Factorial(int n) { if (n = 0) { /* 递归结束条件成立,结束递归 */ return 1; } else { /* 递归结束条件不成立,继续进行递归调用 */ return n * Factorial( n - 1); } } 下面对递归函数factorial()进行分析,可以先考虑基本情况,然后再由基本情况推算其他情况 简单递归通常都有对函数的入口进行测试的基本情况。 一般递归具有如下的两种形式: 形式1 if (递归结束条件) { /*递归结束条件成立,结束递归调用 */ 递归结束处理方面的语句; } else { /*递归结束条件不成立,继续进行递归调用 */ 递归调用方面的语句; } 形式2 if (递归调用条件) { /* 递归调用条件成立,继续进行递归调用 */ 递归调用方面的语句; } [else { /* 递归调用条件不成立,结束递归调用 */ 递归结束处理方面的语句; }] 例7.2 用递归实现将输入的一行字符串按逆序重新输出。S7_2.C /* 将输入的一行字符串按逆序重新输出的递归函数 */ void ReverseDisplay(void) { int c; if ((c = getchar()) != \n) { /* 递归调用条件成立时,继续递归调用 */ ReverseDisplay(); } putchar(c); } 下面对程序代码进行分析: printf(输入一行字符串:\n); ReverseDisplay (); 向用户提示后,进行递归调用函数ReverseDisplay (),当户用按回车键后终止输入。 if ((c=getchar()) != \n) ReverseDisplay (); 用户每输入一个字符,只要没按回车键,都会启动一次对ReverseDisplay()的调用,这时的内部变量c都有自已的存储空间,用于存储所输入的字符,每次调用所输入的字符被堆叠起来,直到按回车键为止。 putchar(c); 当用户输入一行后,才开始显示字符,每次调用ReverseDisplay()都显示存储在内部变量c中的值,显示顺序是先显示回车符\n,再显示换行前的最后一个字符,这样下去,直到显示第一个字符为止,这样便实现了输入字符串的逆序显示。 例7.3 修改例7.2,用递归实现将输入的一行文本按词逆序重新输出。 S7_3.C 将例7.2中的getchar()改成接收单词的函数get_word(),并用函数返回单词的下一个字符(如空格符或回车符) void ReverseDisplay(void) { char w[MAXWORD]; if (GetWord(w) != \n) { ReverseDisplay(); } printf(%s , w); } /* 输入一个单词,用s返回所输入的单词,函数返回值为所输入单词的下一个字符 */ int GetWord(char *s) { int c; while ((c = getchar()) != c != \n) { /* 输入单词 */ *s++ = (char)c; } *s = \0; return c; } 运行程序时,如果用户输入“this is a string .”,运行界面如下所示: 8.2 回溯法 假设问题的解为 n 元组 (x1, x2, …, xn),其中 xi

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档