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





《递归的概念递归过程与递归工作栈递归与回溯广义表ppt课件.pptx》由会员分享,可在线阅读,更多相关《递归的概念递归过程与递归工作栈递归与回溯广义表ppt课件.pptx(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、求解阶乘函数的递归算法求解阶乘函数的递归算法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 vo
2、id 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) /解决汉诺塔问题的算法 i
3、f ( 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); RetL
4、oc1 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
5、)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
6、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.g
7、etTop( ); 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#
8、主对角线主对角线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;
9、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: G
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 递归 概念 过程 工作 回溯 广义 ppt 课件

限制150内