8.3 递归与循环电子课件 计算机系统基础:C语言视角(RISC-V版).ppt

上传人:春哥&#****71; 文档编号:87514578 上传时间:2023-04-16 格式:PPT 页数:8 大小:2.08MB
返回 下载 相关 举报
8.3 递归与循环电子课件 计算机系统基础:C语言视角(RISC-V版).ppt_第1页
第1页 / 共8页
8.3 递归与循环电子课件 计算机系统基础:C语言视角(RISC-V版).ppt_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《8.3 递归与循环电子课件 计算机系统基础:C语言视角(RISC-V版).ppt》由会员分享,可在线阅读,更多相关《8.3 递归与循环电子课件 计算机系统基础:C语言视角(RISC-V版).ppt(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、8.3 递归与循环电子课件 计算机系统基础:C语言视角(RISC-V版)递归与循环递归与循环递归与循环递归与循环在程序设计中,所有的递归函数都可以用传统的在程序设计中,所有的递归函数都可以用传统的循环(如循环(如forfor和和whilewhile循环)来实现循环)来实现某些程序设计问题,递归版本要比重复版本更简单某些程序设计问题,递归版本要比重复版本更简单哪些问题需要递归,哪些问题用循环哪些问题需要递归,哪些问题用循环?递归是很有用的,但是需要付出代价递归是很有用的,但是需要付出代价运行时间运行时间使用数值很大的使用数值很大的n n,对,对SnSn的循环结构版本与递的循环结构版本与递归版本进

2、行对比归版本进行对比intLoopSn(intn)intresult=0;inti=1;for(i=1;i=n;i+)result=result+i;returnresult;int Sn(int n)int Sn(int n)int result;int result;if(n=1)if(n=1)return 1;return 1;else else result=Sn(n-1)+n;result=Sn(n-1)+n;return result;return result;对比对比使用库函数获得函数开始和结束时的时间使用库函数获得函数开始和结束时的时间例如,例如,gettimeofdayge

3、ttimeofday库函数库函数#include#includeintSn(intn);/采用递归实现的采用递归实现的SnintLoopSn(intn);/采用采用for循环实现的循环实现的Snintmain()intin;intsum;doubletimeuse;printf(Inputn:);scanf(%d,&in);structtimevaltv_begin,tv_end;gettimeofday(&tv_begin,NULL);sum=LoopSn(in);gettimeofday(&tv_end,NULL);timeuse=(tv_end.tv_sec-tv_begin.tv_se

4、c)+(tv_end.tv_usec-tv_begin.tv_usec)/1000000.0;printf(time=%fn,timeuse);/打印出采用循环结构的打印出采用循环结构的Sn运行时间运行时间printf(%dn,sum);gettimeofday(&tv_begin,NULL);sum=Sn(in);gettimeofday(&tv_end,NULL);timeuse=(tv_end.tv_sec-tv_begin.tv_sec)+(tv_end.tv_usec-tv_begin.tv_usec)/1000000.0;printf(time=%fn,timeuse);/打印出采

5、用递归结构的打印出采用递归结构的Sn运行时间运行时间printf(%dn,sum);实验分析实验分析对于不同的对于不同的n n的值,递归版本相对要慢(假设的值,递归版本相对要慢(假设编译器没有优化递归)编译器没有优化递归)原因:原因:采用递归函数,需要执行更多的指令采用递归函数,需要执行更多的指令每一次递归调用,都要执行参数传递、寄存器保存每一次递归调用,都要执行参数传递、寄存器保存/恢恢复等指令,影响了效率复等指令,影响了效率对于循环版本,只需要执行一次函数调用对于循环版本,只需要执行一次函数调用栈溢出栈溢出计算计算S Sn nRV32IRV32I计算机,支持的整数为计算机,支持的整数为32

6、32位位不发生溢出的情况下,不发生溢出的情况下,n n的取值最大可以是的取值最大可以是2 21616-1-1,即,即6553565535调用调用SnSn的递归函数,可能达不到这个最大值的递归函数,可能达不到这个最大值如果递归调用次数过多,就可能导致占用的栈空如果递归调用次数过多,就可能导致占用的栈空间超过操作系统为其分配的最大值间超过操作系统为其分配的最大值导致导致栈溢出栈溢出,程序异常退出,计算不出结果,程序异常退出,计算不出结果假设仅有假设仅有100KB100KB连续的存储单元提供给连续的存储单元提供给SnSn函数做函数做运行时栈使用,运行时栈使用,SnSn函数的栈帧大小为函数的栈帧大小为1616个单元,个单元,n n的取值最大仅可以是的取值最大仅可以是64006400

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁