ACM培训第四讲递归PPT资料【优选版】

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.1 递归的概念
例4 排列问题 设计一个递归算法生成n个元素{r1,r2,…,rn}
的全排列
非递归算法:字典序法 [例]字符集{1,2,3},较小的数字较先,这样按
字典序生成的全排列是 :123,132,213,231,312,321。
递归
例4 排列问题 设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。
n/2 ----孙子兵n/2法
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4
递归的概念
• 直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。
• 由分治法产生的子问题往往是原问题的较小模 式,这就为使用递归技术提供了方便。在这种 情况下,反复应用分治手段,可以使子问题与 原问题类型一致而其规模却不断缩小,最终使 子问题缩小到很容易直接求出其解。这自然导 致递归过程的产生。
• 分治与递归像一对孪生兄弟,经常同时应用在 算法设计之中,并由此产生许多高效算法。
((31)) qq((nn,,n1))==11,+nq1(n; ,n-1); 当即正最整n大数1n加 1的 数n 划 n 分11不由大n于1=1n时的,划任分何和正n整1≤数n-n1只的有划一分种组划成分。形式,
当这n自>然1导时致正,递需归整要过利程数用的塔产n座生c的作。为这辅助种塔座表。 示称为正整数n的划分。求正整数n的不 同划分个数。 hanoi(n-1, c, b, a);
第n个Fibonacci数可递归地计算如下: (3) q(n,n)=1+q(n,n-1); 例3 Ackerman函数
iMf (=n0<时=,1)A例r(ent,u0如r)n=n1+正;2 整数6有如下11种不同的划分: 6; 规则3:在满足移动规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上。
}
边界条件 递归方程
递归
例3 Ackerman函数 当一个函数及它的一个变量是由函数自身定义时,称这
个函数是双递归函数。 Ackerman函数A(n,m)定义如下:
A(1,0) 2
A(0,m) 1
A(n,0) n2
m0 n2
A(n,m)A(A(n1,m),m1) n,m1
递归
例3 Ackerman函数 前2例中的函数都可以找到相应的非递归方式定义:
n ! 1 2 3 (n 1 )n
F(n)15125n1125n1
但本例中的Ackerman函数却无法找到非递归的定义。
递归
例3 Ackerman函数
Hale Waihona Puke • A(n,m)的自变量m的每一个值都定义了一个单变量函数:
• M=0时,A(n,0)=n+2
• M=1时,A(n,1)=A(A(n-1,1),0)=A(n-1,1)+2,和A(1,1)=2故 A(n,1)=2*n
被称为Fibonacci数列。它可以递归地定义为:
1
n0
F(n)
1
n1
F(n1)F(n2) n1
第n个Fibonacci数可递归地计算如下: public static int fibonacci(int n)
{ if (n <= 1) return 1; return fibonacci(n-1)+fibonacci(n-2);
递归
例5 整数划分问题
由Ac此ke可rm以an设将函计数出正,A解(nH整,amno)数定i塔义问n如题下表的:递示归算成法如一下。系列正整数之和:n=n1+n2+…+nk 其中n ≥n ≥…≥n ≥1,k≥1。 问第4个人岁数,他说比第3个人大2岁。
public static void han1oi(int n, 2int a, int b, int c)k
• M=2时,A(n,2)=A(A(n-1,2),1)=2A(n-1,2),和
A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)= 2^n 。
22 2 2
• •
MM==43时时,,类A(似n,4的)的可增以长推速出度非n 常快,以至于没有适当的数学式
子来表示这一函数。
练习
• 趣味问题——年龄。有5个人坐在一起, 问第五个人多少岁?他说比第4个人大2 岁。问第4个人岁数,他说比第3个人大2 岁。问第三个人,又说比第2人大两岁。 问第2个人,说比第一个人大两岁。最后 问第一个人,他说是10岁。请问第五个 人多大?用递归算法实现。
ACM培训第四讲递归
优选ACM培训第四讲递归
算法总体思想
• 将求出的小规模的问题的解合并为一个更大规模的问 题的解,自底向上逐步求出原来问题的解。
分分治割T法成(n的一) 设些计规思模想较是小=,的将相一同n个问难题以,直以接便解各决个的击大破问,题,
分而治之。
凡治众如治寡,分数是也。
n/2
n/2
前面的几个例子中,问题本身都具有比较明显的递归关系,因而容易用递归函数直接求解。
5+1; 3+3,3+2+1,3+1+1+1; 4+2,4+1+1; 3+3,3+2+1,3+1+1+1; 2+2+2,2+2+1+1,2+1+1+1+1; 1+1+1+1+1+1。
递归
例5 整数划分问题 前面的几个例子中,问题本身都具有比较明显的递归关系,因 而容易用递归函数直接求解。 在本例中,如果设p(n)为正整数n的划分数,则难以找到递归关 系个,数因记此作考q(n虑,m增)加。一可个以自建变立量q(:n,m将)最的大如加下数递n归1不关大系于。m的划分
设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。 集合X中元素的全排列记为perm(X)。 (ri)perm(X)表示在全排列perm(X)的每一个排列前加上前 缀得到的排列。R的全排列可归纳定义如下:
当n=1时,perm(R)=(r),其中r是集合R中唯一的元素; 当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),…, (rn)perm(Rn)构成。
下面来看几个实例。
递归
例1 阶乘函数 阶乘函数可递归地定义为:
n!n(n11)!
n0 n0
边界条件 递归方程
边界条件与递归方程是递归函数的二个要素,递归函 数只有具备了这两个要素,才能在有限次计算后得出 结果。
递归
例2 Fibonacci数列 无穷数列1,1,2,3,5,8,13,21,34,55,…,
相关文档
最新文档