数据结构递归算法ppt课件.ppt
《数据结构递归算法ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据结构递归算法ppt课件.ppt(46页珍藏版)》请在三一办公上搜索。
1、递归算法(Recursion),本章内容递归算法定义递归算法举例递归算法复杂性的计算,递归(Recursion)定义,直接或间接地调用自身的算法称为递归算法直接或间接调用自身的函数称为递归函数尾递归是指递归调用的语句在递归函数的最后一句递归算法的特点:用于解决一类递归定义的问题算法易于实现,简单明了,递归算法:,1 (n=0,1)n! = n(n-1)! (n1),函数的递归调用,1. 定义: 在调用一个函数的过程中直接或间接地调用该函数本身。直接调用int f(x)int x; int y,z; . z=f(x); return (2*z); ,f 函数,调用 f函数,int f1(x)in
2、t x; int y,z; . z=f2( y); return (2*z); ,int f2(t)int t; int a,c; . c=f1(a); return (3+c); ,间接调用,特点 是无终止的递归调用,因此,应该给定一个限制递归次数的条件。,float fac ( int n) float f; if(n0) printf(“n0,data error!n”); else if(n= =0|n= =1) f=1; else f=fac(n-1)* n ; return f; ,例如:写一函数求n!,以求4的阶乘为例:,fac(4)=4*fac(3),fac(3)=3*fac(
3、 2),fac(2)=2*fac( 1),fac(1)=1,fac(4)=4*3*2*1,fac(2)=2*1,fac(3)=3*2*1,下推,回代,利用栈实现递归调用,递归的执行情况分析,long Fact ( int n) long s; if ( n= =1) s=1;else s=n*Fact(n-1); return(s);,使用递归的准则,如果待解决的问题具备下列两个特性,就可以考虑使用递归。1)复杂的问题可以转换为简单些的1个或几个子问题;2)最简单的问题可以直接解决,例1.3斐波那契(Fibonacci)序列: F0= F1 = 1 Fi = Fi-1 + Fi-2 (i1)
4、算法 求斐波那契数 procedure F(n) /返回第n个斐波那契数/ integer n if n 1 then return(1) else return(F(n-1) + F(n-2) endif end F算法效率:对F(n-1) 、F(n-2)存在大量的重复计算 ,可以改进算法:保存中间结果,例1.4 欧几里得算法 已知两个非负整数a和b,且ab0,求这两个数的最大公因数。 辗转相除法:若b=0,则a和b的最大公因数等于a;若b0,则a和b的最大公因数等于b和用b除a的余数的最大公因数。 算法1.8 求最大公因数 procedure GCD(a,b) / 约定ab / if b=
5、0 then return(a) else return (GCD(b,a mod b) endif end GCD 例: GCD(22,8) = GCD(8,6) = GCD(6,2) = GCD(2,0) = 2;,例1.5 递归在非数值算法设计中的应用 已知元素x,判断x是否在A(1:n)中。 算法 在A(1:n)中检索x procedure SEARCH(i) /如果在A(1:n)/中有一元素A(k)=x,则将其第一次出现的下标k返回,否则返回0/ global n,x,A(1:n) case :in: return(0) :A(i) = x; return(i) :else: ret
6、urn(SEARCH(i+1) endcase end SEARCH,子程序的调用形式,STACK,2.递归算法设计,定义递归(数学公式,数列等的定义。)数据结构递归(单链表,树,二叉树)可用递归解决的问题P(hanoi问题) 问题P具有大规模不同规模的问题P,具有相同性质;并且大规模的问题由小规模的问题构成小规模的问题是可解的关键:找到递归的递推关系找到结束递归的条件,递归求解的伪代码,rocedure P(参数表)beginif 满足递归出口then 简单操作elsebegin 简单操作; CALL P; 简单操作; end;endendp,简单的0/1背包问题,设一个背包容纳的物品最大质
7、量为m,现有n件物品,质量为m1,m2, ,mn,均为正整数。要求从中挑选若干件,使背包质量之和正好为m.(在此问题中,第i件物品要么取,要么不取,不能取一部分,故问题可能有解,可能无解)设用knap(m,n)来表示此问题。有解为true,否则为false,先考虑将物品mn放入背包的情况:knap(m,n) = 若mn = m , 则knap(m,n) true若mn m,则knap(m,n) knap(m,n-1) 即放弃mn物品,从n-1中选取否则mn m, 则knap(m,n) knap(m,n-1) knap(m-mn,n-1)即如果选中mn,问题转化为knap(m-mn,n-1)是否
8、有解;如果无解,放弃mn物品问题转化为knap(m,n-1) 是否有解。,bool knap(m,n)if( n = 1 ) /出口条件if( m1 = m ) return true;else return false;if( mn = m ) return true;if( mn m ) return knap(m,n-1);if( knap( m-mn,n-1 ) return true;return knap(m,n-1);,棋子移动,问题描述:有2n(n3)个棋子排成一行,白子用0代表,黑子用1代表。n=5的状态为: 0000011111_ _ (右边至少两个空位)移动规则:(1)每
9、次必须移动相邻的两个棋子,这两个棋子不能互换位置(2)移动的颜色不限,移动的方向不限要求:最后成为 _ _ 0101010101 的状态(中间无空格)。,N=4,(4,5)-(9,10) n=6, (6,7)-(13,14) (8,9)-(4,5) (11,12)-(6,7) (2,3)-(8,9) n=5 (7,8)-(2,3) (1,2)-(7,8)N=5, (5,6)-(11,12) (9,10)-(5,6) n=4由数学归纳法可知;递归出口为n=4,如果2n个棋子的移动用chess(n)则递归关系 move(n,n+1)(2n+1,2n+2) move (2n-1,2n)(n,n+1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 递归 算法 ppt 课件
链接地址:https://www.31ppt.com/p-1350172.html