递归与迭代程序设计.ppt
《递归与迭代程序设计.ppt》由会员分享,可在线阅读,更多相关《递归与迭代程序设计.ppt(14页珍藏版)》请在第壹文秘上搜索。
1、数据结构与算法设计试验数据结构与算法设计试验第三讲第三讲 递归与迭代递归与迭代l 目的目的 分治法的思想分治法的思想递归算法改写成迭代算法的一般方法递归算法改写成迭代算法的一般方法l 重点重点 递归算法理解递归算法理解递归算法改与迭代算法的转化递归算法改与迭代算法的转化l 难点难点将递归算法改写成迭代算法的一般方法和实现将递归算法改写成迭代算法的一般方法和实现一、递归算法的特点一、递归算法的特点3.1 递归递归l 符合人的递推求解问题的自然思维习惯符合人的递推求解问题的自然思维习惯l 算法的结构简单,代码精炼,可读性好算法的结构简单,代码精炼,可读性好l 效率低效率低二、消除递归的一般步骤二、
2、消除递归的一般步骤例例1:写一个递归函数写一个递归函数 reverse (char * s),按逆序输出一个字,按逆序输出一个字符串,并将此递归算法改写成相应的迭代算法。符串,并将此递归算法改写成相应的迭代算法。递归的基本思路递归的基本思路分治分治S为空字符串吗?为空字符串吗?按逆序输出除按逆序输出除S0外的子字符串外的子字符串输出输出S0返回返回YESNO递归算法递归算法void reverse (char * s) if( *s!=0 ) reverse(s+1); putchar (*s); return;输出输出s=”abc”的递归过程的递归过程进入递归调用进入递归调用, top=0递
3、归调用返回递归调用返回, top=6顺序顺序条件条件栈中元素栈中元素top=, s= 顺序顺序条件条件addr, s 1*s=astack1=s, (a)stack2=L2, (putchar)2, s+11top=6addr=stack6s=stack52*s=bstack3=s, (b)stack4=L2 , (putchar)4, s+22top=4addr=stack4s=stack33*s=cstack5=s, (c)stack6=L2 , (putchar)6, s+33top=2addr=stack2s=stack14*s=0调用结束,转返回处理调用结束,转返回处理4top=0完
4、全返回完全返回void reverse (char * s) extern ElemType stack2*n+1, top=0; L1: if( *s!=0 ) stack+top=s; stack+top=L2; s=s+1; goto L1; L2: putchar(*s); / 接下来处理返回语句 if(top=0 ) return; / 栈为空 else addr=stacktop-; / 恢复地址 s=stacktop-; / 恢复参数 if(addr = L2) goto L2; 改写的迭代算法改写的迭代算法void reverse(char * s) int top=0; wh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 递归 程序设计
