欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:87514578       资源大小:2.08MB        全文页数:8页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    8.3 递归与循环电子课件 计算机系统基础:C语言视角(RISC-V版)递归与循环递归与循环递归与循环递归与循环在程序设计中,所有的递归函数都可以用传统的在程序设计中,所有的递归函数都可以用传统的循环(如循环(如forfor和和whilewhile循环)来实现循环)来实现某些程序设计问题,递归版本要比重复版本更简单某些程序设计问题,递归版本要比重复版本更简单哪些问题需要递归,哪些问题用循环哪些问题需要递归,哪些问题用循环?递归是很有用的,但是需要付出代价递归是很有用的,但是需要付出代价运行时间运行时间使用数值很大的使用数值很大的n n,对,对SnSn的循环结构版本与递的循环结构版本与递归版本进行对比归版本进行对比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;对比对比使用库函数获得函数开始和结束时的时间使用库函数获得函数开始和结束时的时间例如,例如,gettimeofdaygettimeofday库函数库函数#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_sec)+(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);/打印出采用递归结构的打印出采用递归结构的Sn运行时间运行时间printf(%dn,sum);实验分析实验分析对于不同的对于不同的n n的值,递归版本相对要慢(假设的值,递归版本相对要慢(假设编译器没有优化递归)编译器没有优化递归)原因:原因:采用递归函数,需要执行更多的指令采用递归函数,需要执行更多的指令每一次递归调用,都要执行参数传递、寄存器保存每一次递归调用,都要执行参数传递、寄存器保存/恢恢复等指令,影响了效率复等指令,影响了效率对于循环版本,只需要执行一次函数调用对于循环版本,只需要执行一次函数调用栈溢出栈溢出计算计算S Sn nRV32IRV32I计算机,支持的整数为计算机,支持的整数为3232位位不发生溢出的情况下,不发生溢出的情况下,n n的取值最大可以是的取值最大可以是2 21616-1-1,即,即6553565535调用调用SnSn的递归函数,可能达不到这个最大值的递归函数,可能达不到这个最大值如果递归调用次数过多,就可能导致占用的栈空如果递归调用次数过多,就可能导致占用的栈空间超过操作系统为其分配的最大值间超过操作系统为其分配的最大值导致导致栈溢出栈溢出,程序异常退出,计算不出结果,程序异常退出,计算不出结果假设仅有假设仅有100KB100KB连续的存储单元提供给连续的存储单元提供给SnSn函数做函数做运行时栈使用,运行时栈使用,SnSn函数的栈帧大小为函数的栈帧大小为1616个单元,个单元,n n的取值最大仅可以是的取值最大仅可以是64006400

    注意事项

    本文(8.3 递归与循环电子课件 计算机系统基础:C语言视角(RISC-V版).ppt)为本站会员(春哥&#****71;)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开