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

    递归的概念递归过程与递归工作栈递归与回溯广义表ppt课件.pptx

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

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

    递归的概念递归过程与递归工作栈递归与回溯广义表ppt课件.pptx

    求解阶乘函数的递归算法求解阶乘函数的递归算法long Factorial ( long n ) if ( n = 0 ) return 1; else return n * Factorial (n-1);时时当当时时当当 1 ,)!1( 0 , 1!nnnnn main : fact(4)参数参数 4 计算计算 4*fact(3) 返回返回 24参数参数 3 计算计算 3*fact(2) 返回返回 6参数参数 2 计算计算 2*fact(1) 返回返回 2参数参数 1 计算计算 1*fact(0) 返回返回 1参数参数 0 直接定值直接定值 = 1 返回返回 1f f template void Print ( ListNode *f ) if ( f -link = NULL ) cout data link );f f f f f a0a1a2a3a4递归找链尾template void Print ( ListNode *f, Type& x ) if ( f != NULL ) if ( f - data = x ) cout data link, x );f f f f 递归找含x值的结点x#include #include strclass.h”void Hanoi (int n, String A, String B, String C) /解决汉诺塔问题的算法 if ( n = 1 ) cout move A to C endl; else Hanoi ( n-1, A, C, B ); cout move A to C endl; Hanoi ( n-1, B, A, C ); 递归递归工作记录工作记录.Function() .调用块函数块 long Factorial ( long n ) int temp; if ( n = 0 ) return 1; else temp = n * Factorial (n-1); RetLoc2 return temp; void main ( ) int n; n = Factorial (4); RetLoc1 0 RetLoc21 RetLoc22 RetLoc23 RetLoc24 RetLoc1RetLoc1 return 4*6 / RetLoc2 return 3*2 / RetLoc2 return 1 / RetLoc2 return 1*1 / RetLoc2 return 2*1 / long Fib ( long n ) if ( n = 1 ) return n; else return Fib (n-1) + Fib (n-2); 1n2),Fib(n1)Fib(n0,1nn,)Fib(n斐波那契数列的递归调用树斐波那契数列的递归调用树Fib(1)Fib(0)Fib(1)Fib(2)Fib(3)Fib(4)Fib(1)Fib(0)Fib(2)Fib(1)Fib(0)Fib(1)Fib(2)Fib(3)Fib(5)Fib(1)Fib(0)Fib(2)Fib(1)Fib(0)Fib(2)Fib(1)Fib(3)Fib(4)n tagtag = 1, 向左递归;向左递归;tag = 2, 向右递归向右递归Fib(1)Fib(0)Fib(2)Fib(1)Fib(0)Fib(2)Fib(1)Fib(3)Fib(4)2 13 14 1 n=1sum=0+12 23 14 1n=2-23 14 1 n=0sum=1+03 24 1n=3-24 1 n=1sum=1+14 2n=4-2Fib(1)Fib(0)Fib(2)Fib(1)Fib(0)Fib(2)Fib(1)Fib(3)Fib(4)2 14 2 n=1sum=2+12 24 2n=2-24 2 n=0sum=3+0long Fibnacci ( long n ) Stack S; Node *w; long sum = 0; /反复执行直到所有终端结点数据累加完 do while ( n 1 ) w-n = n; w-tag = 1; S.push ( w ); n-; /向左递归到底, 边走边进栈 sum = sum + n; /执行求和 while ( !S.IsEmpty( ) ) w = S.getTop( ); S.Pop( ); if ( w-tag = 1 ) /改为向右递归 w-tag = 2; S.push ( w ); n = w-n 2; /F(n)右侧为F(n-2) break; while ( !S.IsEmpty( ) );return sum;long FibIter ( long n ) if ( n = 1 ) return n; long twoback = 0, oneback = 1, Current; for ( int i = 2; i = 0 ) cout An = 0 ) cout value An endl; n-; 1#主对角线主对角线3#主对角线主对角线5#主对角线主对角线0#次对角线次对角线2#次对角线次对角线4#次对角线次对角线6#次对角线次对角线1#次对角线次对角线3#次对角线次对角线5#次对角线次对角线0#主对角线主对角线2#主对角线主对角线4#主对角线主对角线6#主对角线主对角线0 1 2 3 0123k = i+jk = n+i j- -1u u u u void Queen( int i ) for ( int j = 0; j n; j+ ) if ( ) ; if ( i = n-1 ) ; else Queen ( i+1 ); ; void Queen( int i ) for ( int j = 0; j n; j+ ) if ( !colj & !mdn+i-j-1 & !sdi+j ) /*第第 i 行第行第 j 列没有攻击列没有攻击 */ colj = mdn+i-j-1 = sdi+j = 1; qi = j; /*在在第第 i 行第行第 j 列安放皇后列安放皇后*/ if ( i = n-1 ) for ( j = 0; j n; j+ ) cout qj ,; cout utype; /返回表元素elem的数据类型 GenListNode& setInfo ( Items&x ); /将表元素elem中的值修改为x;class GenList /广义表类定义 private: GenListNode *first; /广义表头指针 GenListNode *Copy ( GenListNode *ls ); /复制一个 ls 指示的无共享非递归表 int depth ( GenListNode *ls ); /计算由 ls 指示的非递归表的深度 int equal (GenListNode *s, GenListNode *t); /比较以s和t为表头的两个表是否相等 void Remove (GenListNode *ls ); /释放以 ls 为表头结点的广义表public: Genlist ( ); /构造函数 GenList ( );/析构函数 GenListNode& Head ( ); /返回表头元素 GenList& Tail ( ); /返回表尾 GenListNode *First ( ); /返回第一个元素 GenListNode * Next ( GenListNode *elem ); /返回表元素elem的直接后继元素 void setNext ( GenListNode *elem1, GenListNode *elem2 ); /将elem2插到表中元素elem1后 void Copy ( const GenList & l ); /广义表的复制 int depth ( ); /计算一个非递归表的深度 int Createlist ( GenListNode *ls, char * s );/从广义表的字符串描述 s 出发, /建立一个带表头结点的广义表结构 Items& GenListNode : Info ( GenListNode * elem ) /返回表元素elem的值 Items *pitem = new Items; pitem-utype = elem-utype; pitem-value = elem-value; return * pitem;GenListNode& GenListNode :setInfo ( Items &x ) /修改表元素的值为 x utype = x-utype; value = x-value; Genlist : GenList ( ) /构造函数 GenListNode *first = new GenListNode( ); first-utype = 0; first-ref = 1; first-tlink = NULL;Items& GenList : Head ( ) /若广义表非空,则返回其第一个元素的值,/否则函数没有定义。 if ( first-tlink = NULL ) return NULL; else /非空表 Items * temp = new Items; temp-utype = frist-tlink-utype; temp-value = frist-tlink-value; return * temp; /返回类型及值 GenList& GenList : Tail ( ) /若广义表非空,则返回广义表除第一个元/素外其它元素组成的表, 否则函数没有定义 if ( frist-tlink = NULL ) return NULL; else /非空表 GenList * temp; temp-first = Copy ( first ); return * temp; GenListNode * GenList : First ( ) if ( first-tlink = NULL ) return NULL; else return first-tlink;GenListNode * GenList : Next ( GenListNode *elem ) if ( elem-tlink = NULL ) return NULL; else return elem-tlink;void GenList : Copy ( const GenList& ls ) first = Copy ( ls.first );/共有函数GenListNode* GenList : Copy ( GenListNode* ls ) /私有函数 GenListNode *q = NULL; if ( ls != NULL ) q = new GenListNode ( ls-utype, NULL ); switch ( ls-utype ) case 0: q-value.ref = ls-value.ref; break; case 1: q-value.intgrinfo = ls-value.intgrinfo; break; case 2: q-value.charinfo = ls-value.charinfo; break; case 3: q-value.hlink = Copy (ls-value.hlink); q-tlink = Copy (ls-tlink); return q;求广义表的深度求广义表的深度1111234int GenList : depth ( GenListNode *ls ) if ( ls-tlink = NULL ) return 1; /空表 GenListNode * temp = ls-tlink; int m = 0; while ( temp != NULL ) /在表顶层横扫 if ( temp-utype = 3 ) /结点为表结点 int n = depth ( temp-value.hlink ); if ( m tlink; return m+1;int GenList : depth ( ) return depth ( first );0 11 5331 2 0 12 x 0 10 12 y32 x void delvalue(GenListNode * ls, const value x) /在广义表中删除所有含 x 的结点 if ( ls-tlink != NULL ) /非空表 GenListNode * p = ls-tlink; while ( p != NULL & /横扫链表 ( ( p-utype = 1 & p-value.intinfo = x ) | ( p-utype = 2 & p-value.charinfo = x ) ) ls-tlink = p-tlink; delete p; /删除 p = ls-tlink; /指向同一层后继结点 if ( p != NULL ) if ( p-utype = 3 ) /在子表中删除 delvalue ( p-value.hlink, x ); delvalue ( p, x ); /在后续链表中删除 GenList : GenList ( ) /析构函数 Remove ( first );void GenList : Remove ( GenListNode *ls ) /私有函数:释放以 ls 为表头指针的广义表 ls-value.ref - ; /引用计数减1 if ( ls-value.ref = 0 ) /如果减到0 GenListNode *p = ls, *q; /横扫表顶层 while ( p-tlink != NULL ) q = p-tlink; /到第一个结点 if ( q-utype = 3 ) /递归删除子表 Remove ( q-value.hlink ); p-link = q-link; delete q;

    注意事项

    本文(递归的概念递归过程与递归工作栈递归与回溯广义表ppt课件.pptx)为本站会员(知****量)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




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

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

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

    收起
    展开