




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章函数程序设计第2节递归函数程序设计
1程序解析2递归函数基本概念3递归程序设计1汉诺(Hanoi)塔问题解析
将64个盘从座A搬到座B(1)一次只能搬一个盘子(2)盘子只能插在A、B、C三个杆中(3)大盘不能压在小盘上
A B C分析
A B C分析
A B C
A B Cnn-1n-1分析
A B C
A B Cn1汉诺(Hanoi)塔问题解析递归方法的两个要点(1)递归出口:一个盘子的解决方法;(2)递归式子:如何把搬动64个盘子的问题简化成搬动63个盘子的问题。把汉诺塔的递归解法归纳成三个步骤:n-1个盘子从座A搬到座C第n号盘子从座A搬到座Bn-1个盘子从座C搬到座B算法:hanio(n个盘,A→B,C为过渡){if(n==1)
直接把盘子A→Belse{hanio(n-1个盘,A→C,B为过渡)
把第n号盘A→B hanio(n-1个盘,C→B,A为过渡) }}
A B Cn-12递归函数基本概念例
用递归函数实现求n!递推法在学习循环时,计算n!采用的就是递推法:
n!=1×2×3×…×n用循环语句实现:
result=1; for(i=1;i<=n;i++) result=result*i;递归法n!=n×(n-1)! 当n>1 递归式子=1 当n=1或n=0 递归出口即求n!可以在(n-1)!的基础上再乘上n。如果把求n!写成函数fact(n),则fact(n)的实现依赖于fact(n-1)。例10-2用递归函数求n!。#include<stdio.h>doublefact(intn);intmain(void){intn;scanf("%d",&n);printf("%f",fact(n));return0;}doublefact(intn) /*函数定义*/{doubleresult;
if(n==1||n==0) /*递归出口*/result=1;elseresult=n*fact(n-1);
returnresult;}2递归函数基本概念递归式递归出口分析求n!递归定义n!=n*(n-1)!(n>1)n!=1(n=0,1)#include<stdio.h>doublefact(intn);intmain(void){intn;scanf("%d",&n);printf("%f",fact(n));return0;}doublefact(intn){doubleresult;
if(n==1||n==0)result=1;elseresult=n*fact(n-1);
returnresult;}fact(n)=n*fact(n-1);main()fact(3)fact(2)fact(1){....{....{....{....printf(fact(3))f=3*fact(2)f=2*fact(1)f=1}return(f)return(f)return(f)}}}递归函数fact(n)的实现过程fact(3)=3*fact(2)=
2*fact(1)=
fact(1)=12*1=23*2=6同时有4个函数在运行,且都未完成3递归程序设计用递归实现的问题,满足两个条件:问题可以逐步简化成自身较简单的形式(递归式)n!=n*(n-1)!nn-1Σi=n+Σi
i=1i=1递归最终能结束(递归出口)两个条件缺一不可解决递归问题的两个着眼点3递归程序设计例
编写递归函数reverse(intn)实现将整数n逆序输出。
分析:将整数n逆序输出可以用循环实现,且循环次数与n的位数有关。递归实现整数逆序输出也需要用位数作为控制点。归纳递归实现的两个关键点如下:递归出口:直接输出n,如果n<=9,即n为1位数递归式子:输出个位数n%10,再递归调用reverse(n/10)输出前n-1位,如果n为多位数3递归程序设计由于结果是在屏幕上输出,因此函数返回类型为voidvoidreverse(intnum){ if(num<=9) printf("%d",num); /*递归出口*/ else{ printf("%d",num%10); reverse(num/10); /*递归调用*/ }}例
汉诺(Hanoi)塔问题
A B Chanio(n个盘,A→B,C为过渡){if(n==1)
直接把盘子A→Belse{hanio(n-1个盘,A→C,B为过渡)
把n号盘A→B hanio(n-1个盘,C→B,A为过渡) }}
源程序
/*搬动n个盘,从a到b,c为中间过渡*/voidhanio(intn,chara,charb,charc){if(n==1)printf("%c-->%c\n",a,b);else{hanio(n-1,a,c,b);printf("%c-->%c\n",a,b);hanio(n-1,c,b,a);}}intmain(void){intn;printf("inputthenumberofdisk:");scanf("%d",&n);printf("thestepsfor%ddiskare:\n",n);hanio(n,'a',‘b',‘c');return0;}inputthenumberofdisk:3t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冷饮饮料分层管理制度
- 汽车集市装修方案(3篇)
- 平台规范售价管理制度
- 密码电报撰写管理制度
- 分享经济公司管理制度
- 学校营养早餐管理制度
- 协会项目绩效管理制度
- 古建住宅改造方案(3篇)
- 菜窖改造维修方案(3篇)
- 临建费用分摊方案(3篇)
- 租户装修期内退租协议书
- 广东省广州荔湾区真光中学2025年高二下物理期末学业水平测试试题含解析
- 茶籽油批发协议书
- 七匹狼存货管理:供应链视角下的分析
- 2025届柳州市重点中学八年级物理第二学期期末考试模拟试题含解析
- GB/T 36066-2025洁净室及相关受控环境检测技术要求与应用
- 西藏事业单位c类历年真题
- 2024年秋儿童发展问题的咨询与辅导终考期末大作业案例分析1-5答案
- 湖南省长沙市雅礼教育集团2023-2024学年七年级下学期期末语文试题
- (正式版)JBT 11270-2024 立体仓库组合式钢结构货架技术规范
- GB∕T 33212-2016 锤上钢质自由锻件 通用技术条件
评论
0/150
提交评论