递归与回溯法课题:递归与回溯目标:知识目标:递归概念与利用递归进行回溯能力目标:回溯算法的应用重点:回溯算法难点:回溯算法的理解板书示意:1)递归的理解2)利用递归回溯解决实际问题(例14、例15、例16、例17、例18)3)利用回溯算法解决排列问题(例19)授课过程:什么是递归
先看大家都熟悉的一个民间故事:从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,故事里说,从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,故事里说……
象这样,一个对象部分地由它自己组成,或者是按它自己定义,我们称之是递归
例如,我们可以这样定义N
=N*(N-1)
转化为求(N-1)
这就是一个递归的描述
因此,可以编写如下递归程序:programFactorial;varN:Integer;T:Longint;functionFac(N:Integer):Longint;beginifN=0thenFac:=1elseFac:=N*Fac(N-1)end;beginWrite('N=');Readln(N);T:=Fac(N);Writeln('N
=',T);end
图13展示了N=3的执行过程
由上述程序可以看出,递归是一个反复执行直到递归终止的过程
设一个未知函数f,用其自身构成的已知函数g来定义:为了定义f(n),必须先定义f(n-1),为了定义f(n-1),又必须先定义f(n-2),…,图13递归调用示例图上述这种用自身的简单情况来定义自己的方式称为递归定义
递归有如下特点:①它直接或间接的调用了自己
②一定要有递归终止的条件,这个条件通常称为边界条件
与递推一样,每一个递推都有其边界条件
但不同的是,递推是由边界条件出发,通过递推式求f(n)的值,从边界到求解的全过程十分清楚;而递归则是从函数自身出发来达